我想测试一个方法,该方法获取一个信息作为参数的对象:
//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(用户)。
使用createMockUser()的这些变体:
使用何时功能:
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的新手,但是从我得到的内容来看,spy确实使用了对象的方法来获取对象中的值,并且只是让get函数调用返回模拟中指示的内容。但是对于这个测试,它们的结果基本相同,因为我只想测试foo。 那么,哪一个更好还是更优雅?
答案 0 :(得分:0)
模拟简单的豆通常不是很有趣。无论如何,如果调用getter,它都会返回使用setter方法设置的值。没什么大不了。
另一方面,如果你想检查多少次以及调用setter或getter的参数,那么对简单bean进行间谍是有意义的。因此,对于验证,间谍活动绝对可以,并且有意义。