Mockito间谍功能

时间:2015-10-18 23:15:07

标签: java mockito

我正在测试一些使用Mockito间谍来监控真实物体的代码。 例如,我创建了一个Map&调用size()方法并验证是否调用了size()方法。

我有以下代码:

Map<String, String> mapTest = new HashMap<>();
Map<String, String> spyMap = spy(mapTest);
mapTest.size();
verify(spyMap, times(1)).size();

当我运行测试时,我得到一个错误,即没有与size()方法的交互。如果我调用spyMap.size(),那么这个测试就可以了。 我应该怎么做才能监控mapTest&#39;

1 个答案:

答案 0 :(得分:2)

Mockito中验证方法背后的想法是验证MOCKED或PARTIALLY MOCKED对象是否完成了某些操作。您无法真正监控通过Mockito创建的真实对象。但是,您可以使用通过Mockito创建的间谍对象。间谍是部分嘲笑。模拟的其余部分与原始模型保持一致。这个想法是你然后覆盖你希望存根的方法。因此,从某种意义上说,如果您不覆盖任何内容,那么当您不覆盖任何方法时,您将获得原始对象的副本。因此,要真正测试调用size方法的次数,您可以创建HashMap的间谍,然后注入它并让代码处理它以查看它被调用了多少次。这常常迫使我们重构代码以使其可测试。您可能需要找到一种方法来注入HashMap,以便可以插入间谍,然后再对其应用断言。