Mockitovalidation不再与任何模拟交互

在Mockito,有没有办法validation我创建的任何模拟都没有更多的交互?

例如:

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

有这样的方法吗?

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

您可以创建此类

 public class MocksCollector { private final List createdMocks; public MocksCollector() { createdMocks = new LinkedList(); 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内部的依赖。