如何模拟Dao两次但是用同一个Object调用?

时间:2017-04-07 05:36:17

标签: java unit-testing mocking mockito

如何使用相同的对象模拟在测试方法中调用的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有什么方法吗?

2 个答案:

答案 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(如果你甚至进一步调用该方法)。