例如,我有以下测试(JUnit 4.12,Mockito 1.9.5)
public class SomeServiceTest {
SomeDao someDao = mock(SomeDao.class);
SomeService someService = new SomeService(someDao);;
@Test
public void test() {
UserModel user = mock(UserModel.class);
when(user.getName()).thenReturn("name");
someService.perform(user);
verify(someDao).someDaoMethod(any(), eq(user.getName()));
}
}
失败是因为mockito认为没有使用someDaoMethod
返回的值调用方法user.getName()
。
但如果我用
String name = user.getName();
verify(someDao).someDaoMethod(any(), eq(name));
它过去了!那么,如果name == user.getName()
为什么然后someDaoMethod(any(), eq(user.getName()))
失败但someDaoMethod(any(), eq(name))
通过?有没有办法在不创建局部变量的情况下克服这个问题?
Bellow是SomeService
和SomeDao
的实现。 UserMode
只是一个JavaBean。
public class SomeService {
private SomeDao someDao;
public SomeService(SomeDao someDao) {
this.someDao = someDao;
}
public void perform(UserModel user) {
someDao.someDaoMethod("random", user.getName());
}
}
public class SomeDao {
public void someDaoMethod(String id, String name) {
//...
}
}