在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 } }
它可以工作,但是增加了对嘲笑内部的依赖。