如何模拟在测试方法中使用相同的对象但具有不同内部状态(参数的(两次调用的 Dao。
User user = new User();
user.setActivity(false);
int prevActivity = accessDao.calculateWork(user);
user.setActivity(true);
int predActivity = accessDao.calculateWork(user);
if(prevActivity==0) {
//someAction
}
...
if(predActivity<15) {
//someOtherAction.
}
我无法更改代码。对于以下情况,莫西托有什么办法吗?
这是您可能正在寻找的吗?
accessDao = mock(AccessDao.class);
when(accessDao.calculateWork(user)).thenReturn(0).thenReturn(15)
你可以指示Mokcito先返回一个答案,然后再返回另一个答案。但是请注意,最后一个将是"无限重复";即始终返回 15(如果您有对该方法的进一步调用(。
你可以使用Mockito的答案。
AtomicInteger counter = new AtomicInteger();
when(accessDao.calculateWork(user)).thenAnswer(new Answer() {
Object answer(InvocationOnMock invocation) {
if (counter.getAndIncrement() == 0) return someValue;
return anotherValue;
}
});