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

时间:2023-05-04
本文介绍了Mockito 验证不再与任何模拟交互的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

限时送ChatGPT账号..

在 Mockito 中,有没有办法验证我创建的任何模拟上没有更多交互?

In Mockito, is there a way to verify that there are no more interactions on any mock I have created?

例如:

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

有这样的方法吗?

推荐答案

自从 verifyNoMoreInteractions 获取一个对象数组,我们必须找到一种方法来获取所有创建的模拟.

Since verifyNoMoreInteractions take an array of object we have to find a way to get all the created mocks.

你可以创建这个类

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();
    }
}

然后在你的测试中使用它:

and then use it in your test :

    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
    }
}

它可以工作,但它增加了对内部模拟的依赖.

It works but it adds a dependency on mockito internal.

这篇关于Mockito 验证不再与任何模拟交互的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

上一篇:如何验证具有不同参数的多个方法调用 下一篇:使用 PowerMock 模拟私有方法,但仍会调用底层方法

相关文章