パラメータとして情報を持つオブジェクトを取得するメソッドをテストしたい:
//mocking a user object with some random data
User user createMockUser(loginName, firstName, lastName, salutation, company, mailAddress);
//do something with that user object
foo(user);
テストの焦点は、foo(user) をテストすることです。
createMockUser() のこれらのバリアントを使用すると、次のようになります。
when 関数の使用:
protected User createMockUser(String loginName, String firstName,
String lastName, String salutation, String mailAddress)
{
User user = Mockito.mock(User.class);
Mockito.when(user.getLoginName()).thenReturn(id);
Mockito.when(user.getFirstName()).thenReturn(firstName);
Mockito.when(user.getLastName()).thenReturn(lastName);
Mockito.when(user.getSalutation()).thenReturn(salutation);
Mockito.when(user.getMailAddress()).thenReturn(mailAddress);
return user;
}
スパイの使用:
protected User createMockUser(String loginName, String firstName,
String lastName, String salutation, String mailAddress)
{
User spyUser = spy(new User());
spyUser.setLoginName(loginName);
spyUser.setFirstName(firstName);
spyUser.setLastName(lastName);
spyUser.setSalutation(salutation);
Mockito.when(spyUser.getMailAddress()).thenReturn(mailAddress);
return spyUser;
}
これはまったく機能しません。
protected User createMockUser(String loginName, String firstName,
String lastName, String salutation, String mailAddress)
{
User user;
user = Mockito.mock(User.class);
user.setLoginName(loginName);
user.setFirstName(firstName);
user.setLastName(lastName);
user.setSalutation(salutation);
Mockito.when(user.getMailAddress()).thenReturn(mailAddress);
return user;
}
私はまだmockitoに慣れていませんが、私が得たものから、スパイは実際にオブジェクトのメソッドを使用してオブジェクトに値を持ち、get関数呼び出しを行ってモックに示されているものを返すだけです。しかし、このテストでは、foo のみをテストしたいので、結果に関しては基本的に同じです。それで、どれがより良いでしょうか、それとももっとエレガントな方法がありますか?