Mockitovalidation不再与任何模拟交互
在Mockito,有没有办法validation我创建的任何模拟都没有更多的交互?
例如:
public void test() { ... TestObject obj = mock(TestObject); myClass.test(); verifyNoMoreInteractionsWithMocks(); <------- }
有这样的方法吗?
由于verifyNoMoreInteractions采用一个对象数组,我们必须找到一种方法来获取所有创建的模拟。
您可以创建此类
public class MocksCollector { private final List
然后在测试中使用它:
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内部的依赖。