サブアカウントが自分の twilio アカウントで既に見つかった場合に true を返すメソッドの単体テストを作成しています。これを Mockito でモックしようとしていますが、List を AccountList にキャストするキャスト エラーが発生します。私はmockitoのドキュメントに目を通しましたが、何かを見落としている可能性があります。
これはテストです:
@Mock
TwilioRestClient client;
@Mock
AccountList accountList;
@Mock
Iterator<Account> iterator;
@Mock
Account account;
@Test
public void testShouldReturnTrueIfAccountNameFound() {
final List<Account> list = Arrays.asList(account);
when(client.getAccounts()).thenReturn((AccountList) list);
when(account.getFriendlyName()).thenReturn("test");
when(accountList.iterator()).thenReturn(list.iterator());
MyTwilioAccountStore store = null;
store = new MyTwilioAccountStore(client);
Assert.assertTrue(store.subAccountExists("test"));
}
そして、これは私がテストしている方法です。コンストラクターに TwilioRestClient を挿入しています。
/**
* class constructor
*
* @param client
*/
public MyTwilioAccountStore(TwilioRestClient client) {
fClient = client;
}
/**
* rest client getter
*
* @return RESTClient
*/
public TwilioRestClient getRestClient() {
return fClient;
}
/**
* Check if a sub account already exists
*
* @param friendlyName
* @return boolean
*/
public boolean subAccountExists(String friendlyName) {
// Build a filter for the AccountList
Map<String, String> params = new HashMap<String, String>();
params.put("FriendlyName", friendlyName);
AccountList accounts = getRestClient().getAccounts(params);
// Loop over accounts
// This is where I get NPE
for (Account account : accounts) {
if (account.getFriendlyName().equalsIgnoreCase(friendlyName)) {
return true;
}
}
return false;
}
これは、Twilio ソース コードの getAccounts です。
/**
* Get all accounts. For more info: {@link <a
* href="http://www.twilio.com/docs/api/rest/account"
* >http://www.twilio.com/docs/api/rest/account</a>}
*
* @return the list of accounts.
*/
public AccountList getAccounts() {
return this.getAccounts(new HashMap<String, String>());
}
AccountList を正しくモックするにはどうすればよいですか?