tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Testing Apex Callouts を試してみました

Force.com Blogで紹介されていたTesting Apex Callouts using HttpCalloutMockの記事を試してみました。

Force.com Blog - Testing Apex Callouts using HttpCalloutMock -

http://goo.gl/QHah3


Winter'13でリリースされた Apex callouts のテストクラス実行に関する記事でした。
Callout処理のテスト実行方法について勉強になりました。


テスト実行には次の処理が記載されているApexクラスが必要になるとのことです。

implements HttpCalloutMock

このクラスを作成する際は、3メガバイトの組織のコードサイズの制限からクラスを除外するために@isTestをつけておくといいとの説明がありました。

やってみて・・

Testing a single HTTP calloutの確認

Testing a single HTTP calloutはすんなりと実行することができました。
※補足
System.assertEquals(/*check for expected results here...*/);の部分はコメントアウトするか、きちんと処理を記載する必要がありました。

Testing multiple HTTP calloutsの確認

Testing multiple HTTP calloutsでは次の箇所でエラーが発生し、実行に失敗しました。

Listについて

"List accounts ="のような記載がいくつかありました。おそらく"List< Account >"などの誤りだと思います。
※補足
おそらくこんな感じになると思います。

public static Integer processAccountsContacts() {
        String jsonData = getJSON('http://api.example.com/accounts');
        List<Account> accounts =
            (List<Account>)JSON.deserialize(jsonData, List<Account>.class);

        jsonData = getJSON('http://api.example.com/contacts');
        List<Contact> contacts =
            (List<Contact>)JSON.deserialize(jsonData, List<Contact>.class);

        // 'Processing'
        Integer result = accounts.size() + contacts.size();
        return result;
    }
throw new MyCustomExceptionについて

次のように独自の例外クラスを宣言する必要があると思われます。

public class MyCustomException extends Exception {}
public class MultiRequestMockについて

@isTestがついていませんが、つけておいて問題ないと思います。

※補足
System.assertEquals(/*check for expected results here...*/);の部分はコメントアウトなどする必要がありました。

参考サイト

Force.com Blog - Testing Apex Callouts using HttpCalloutMock -

http://goo.gl/QHah3

Testing HTTP Callouts by Implementing the HttpCalloutMock Interface

http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_classes_restful_http_testing_httpcalloutmock.htm