我怎么知道是否创建了任何 mockito 对象

how can I tell if any mockito object was created

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

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

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

Mockito 不会保留所有模拟的全局列表,因为模拟旨在成为在每次测试之前被替换的短期对象——通常由 @Before 方法替换,MockitoJUnitRunner, or MockitoRule。 (保留一个全局列表可能会干扰 mock 的垃圾收集。)如果测试在开始之前没有替换和准备它的整个环境,那通常是正在启动的测试的错误,而不是没有清理的测试。

如果您使用 Mockito 作为每个测试套件启动一次的长寿命服务器的一部分(或者有一个长寿命的容器注入模拟),这对 Mockito.reset listed as item #17 in the Mockito docs 是一个很好的用途。 reset 将清除模拟的所有期望和记录的调用,这有利于在测试开始或结束时清除长期存在的对象。它经常被错误地用于清除应该分成两个测试的测试中间的期望;小心不要为此目的过度使用它。

旁白: 你可能不应该使用 MockUtil; it's in an internal package. Prefer Mockito.mockingDetails(Object) instead, as in the Mockito docs as item #26.