如何使用相同的对象模拟在测试方法中调用的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.
}
我无法更改代码。在以下情况下Mockito有什么方法吗?
答案 0 :(得分:1)
你可以使用Mockito的答案。
AtomicInteger counter = new AtomicInteger();
when(accessDao.calculateWork(user)).thenAnswer(new Answer() {
Object answer(InvocationOnMock invocation) {
if (counter.getAndIncrement() == 0) return someValue;
return anotherValue;
}
});
答案 1 :(得分:1)
这可能是你想要的吗?
accessDao = mock(AccessDao.class);
when(accessDao.calculateWork(user)).thenReturn(0).thenReturn(15)
您可以指示Mokcito首先返回一个答案,然后再返回另一个答案。但请注意,最后一个将是“infinte repeated”;即总是返回15(如果你甚至进一步调用该方法)。