我有一个执行以下操作的例程:
public void onEvent(List<Dto> pendingData)
{
eventDao.saveBatch(pendingData);
pendingData.clear();
}
在对例程的测试中,我将@Mock用于eventDao:
@Mock
private EventDAO eventDao;
@Test
public void onEvent() {
// some preparations
handler.onEvent(testEvents);
// eventsExpectedToBePassed is the same as testEvents but it is an
// independent object populated separately
verify(eventDao, times(1)).saveBatch(eventsExpectedToBePassed);
}
verify失败,并显示以下信息:使用空数组调用了例程。之所以可能发生这种情况,是因为Mockito只是存储了对传递给模拟的数组的引用,并且正如您从onEvent代码中看到的那样,该数组在以后的执行过程中被清除。如果我通过致电
eventDao.saveBatch(new ArrayList(pendingData));
然后测试通过OK。但是,我想避免这种情况,因为这是我不需要的额外操作。
我如何告诉Mockito保存传递的数组的副本,而不是保存数组本身,所以当清除数组时,在测试代码中我保留它以供断言吗?