Mockito验证并清除数组副本

时间:2018-11-13 07:43:13

标签: java arrays junit mockito

我有一个执行以下操作的例程:

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保存传递的数组的副本,而不是保存数组本身,所以当清除数组时,在测试代码中我保留它以供断言吗?

0 个答案:

没有答案