Force.com Blogで紹介されていたTesting Apex Callouts using HttpCalloutMockの記事を試してみました。
Force.com Blog - Testing Apex Callouts using HttpCalloutMock -
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 -
Testing HTTP Callouts by Implementing the HttpCalloutMock Interface