如何判断是否创建了任何mockito对象

时间:2015-09-17 14:03:59

标签: java junit mockito

有没有办法判断是否在测试中创建了任何mockito对象? 在我们的测试中,Mockito对象在会话中保存,然后应该从循环中的会话中删除:

    MockUtil mockUtil = new MockUtil();
    for (Object object : sessionObjects) {
        if (mockUtil.isMock(mock) || mockUtil.isSpy(mock)) {
            toClean.add(serviceClass);
        }
    }

有没有办法避免这个循环并检查是否创建了任何模拟对象?

1 个答案:

答案 0 :(得分:2)

Mockito并没有保留所有模拟的全局列表,因为模拟是在每次测试之前被替换的短期对象 - 通常是@Before方法,MockitoJUnitRunner或{ {3}}。 (保留全局列表可能会干扰模拟和垃圾收集。)如果测试在启动之前没有替换并准备好整个环境,那通常是测试的错误,而不是测试没有清理。

如果您使用Mockito作为每个测试套件启动一次的长期服务器的一部分(或者其他具有长期容器注入的模拟),那么MockitoRule列为Mockito.reset很有用{3}}。 reset将清除模拟的所有期望和记录调用,这有利于在测试的开始或结束时清除长期存在的对象。经常和错误地使用它来清除测试过程中的期望,应该分成两个测试;小心不要为此目的过度使用它。

旁白:您可能不应该使用item #17 in the Mockito docs;它在内部包装中。请改为MockUtil,例如Mockito.mockingDetails(Object)