当前位置: 首页 > 面试题库 >

Mockito验证不再与任何模拟互动

殷宾白
2023-03-14
问题内容

在Mockito中,是否有办法验证我创建的任何模拟游戏中都没有交互?

例如:

public void test()
{
  ...
  TestObject obj = mock(TestObject);
  myClass.test();
  verifyNoMoreInteractionsWithMocks();  <-------
}

有这种方法吗?


问题答案:

由于verifyNoMoreInteractions带有对象数组,因此我们必须找到一种方法来获取所有创建的模拟。

您可以创建此类

public class MocksCollector {
    private final List<Object> createdMocks;

    public MocksCollector() {
        createdMocks = new LinkedList<Object>();
        final MockingProgress progress = new ThreadSafeMockingProgress();
        progress.setListener(new CollectCreatedMocks(createdMocks));
    }

    public Object[] getMocks() {
        return createdMocks.toArray();
    }
}

然后在测试中使用它:

    public class ATest {
    private final MocksCollector mocksCollector = new MocksCollector();

    @Test
    public void test() throws Exception {
        A a1 = mock(A.class);
        A a2 = mock(A.class);
        A a3 = mock(A.class);
        assertEquals("wrong amount of mocks", 3, mocksCollector.getMocks().length);
        verifyNoMoreInteractions(mocksCollector.getMocks());
        a3.doSomething();
        verifyNoMoreInteractions(mocksCollector.getMocks()); // fail
    }
}

或带有注释:

@RunWith(MockitoJUnitRunner.class)
public class A2Test {
    private final MocksCollector mocksCollector = new MocksCollector();

    @Mock
    private A a1;
    @Mock
    private A a2;
    @Mock
    private A a3;

    @Test
    public void test() throws Exception {
        assertEquals("wrong amount of mocks", 3, mocksCollector.getMocks().length);
        verifyNoMoreInteractions(mocksCollector.getMocks());
        a2.doSomething();
        verifyNoMoreInteractions(mocksCollector.getMocks()); // fail
    }
}

它可以工作,但是增加了对嘲笑内部的依赖。



 类似资料:
  • 我被通缉了,但没有被征召。方法在行处与此模拟错误没有任何交互。甚至我也嘲弄了这个对象&在调试函数时被调用。 下面是我要测试的函数,

  • 问题内容: 我正在寻找一种与Mockito进行验证的方法,即在测试过程中与给定的模拟没有任何交互。对于具有验证模式的给定方法,很容易实现这一点,但是我还没有找到完整模拟的解决方案。 我真正想要实现的是:在测试中验证,没有任何内容打印到控制台上。jUnit的总体思路如下: A 有很多方法,我真的不想用单独的验证方法来验证每个方法,而… 因此,我希望,如果有一个简单的解决方案,鉴于我具有良好的测试覆盖

  • 我正在寻找一种方法来验证Mockito,在测试期间没有与给定的模拟进行任何交互。对于具有验证模式的给定方法,很容易实现这一点,但是我还没有找到完整模拟的解决方案。 我真正想要实现的是:在测试中验证,控制台上没有打印任何get。jUnit的总体思路如下: 一个有很多方法,我真的不想用单独的verify来验证每一个方法,对于。。。 所以我希望,如果有一个简单的解决方案,鉴于我有一个良好的测试覆盖率,我

  • 我已经通过StackOverflow上的帖子。 想要但没有被调用:实际上,这个模拟没有任何交互。 我确实做了被要求的事情,但我仍然错过了一些东西。你能帮帮我我错过了什么吗? 我的Java代码: 我的单元测试: 一切正常工作,除了我得到错误作为

  • 我正在训练一个数据集,然后在其他数据集上测试它。

  • MyDriveRepository.getMyDriveItemSelectedPathuri一直返回null。我试着查看以下链接,但没有找到解决问题的方法。