ben*_*min 13 java tdd verification unit-testing mockito
我正在使用Mockito验证InOrder对象的方法调用顺序.但是我对调用的总排序不感兴趣,只是在调用其他一些方法之前,某些方法调用都发生了.比如这样
@Test
public void testGroupOrder() {
Foo foo1 = mock(Foo.class);
Foo foo2 = mock(Foo.class);
Bar underTest = new Bar();
underTest.addFoo(foo1);
underTest.addFoo(foo2);
underTest.fire()
InOrder inOrder = inOrder(foo1,foo2);
inorder.verify(foo1).doThisFirst();
inorder.verify(foo2).doThisFirst();
inorder.verify(foo1).beforeDoingThis();
inorder.verify(foo2).beforeDoingThis();
}
Run Code Online (Sandbox Code Playgroud)
但是这个测试确实测试得太多了,因为它测试了Foo实例的顺序.但我只对不同方法的顺序感兴趣.事实上,我想underTest不区分它们的实例Foo,它们可能有一个内部顺序,所以foos被调用的顺序无关紧要.我想将其作为实现细节.
但重要的是,在调用任何其他foo 之前,doThisFirst()已经调用了所有 foos .有可能用Mockito表达吗?怎么样?beforeDoingThis()
Mockito验证传递给inorder函数的所有模拟的顺序.因此,如果您不想验证foos的顺序,则需要创建两个单独的in-order.即
@Test
public void testGroupOrder() {
Foo foo1 = mock(Foo.class);
Foo foo2 = mock(Foo.class);
Bar underTest = new Bar();
underTest.addFoo(foo1);
underTest.addFoo(foo2);
underTest.fire()
InOrder inOrderFoo1 = inOrder(foo1);
inOrderFoo1.verify(foo1).doThisFirst();
inOrderFoo1.verify(foo1).beforeDoingThis();
InOrder inOrderFoo2 = inOrder(foo2);
inOrderFoo2.verify(foo2).doThisFirst();
inOrderFoo2.verify(foo2).beforeDoingThis();
}
Run Code Online (Sandbox Code Playgroud)