【发布时间】:2015-04-09 12:23:49
【问题描述】:
这里是要测试的方法:
protected void myMethod(final MyObject object) {
object.setX(...);
object.setY(...);
myObjectRepository.update(object);
}
为了验证调用的顺序——以便在所有 setter 调用之后调用存储库——我需要对 MyObject 进行模拟(因为 inOrder 仅适用于模拟)。 最后应该是这样的:
@Mock
private MyObjectRepository myObjectRepositoryMock;
@Test
public void testMyMethod() {
MyObject myObjectMock = mock(MyObject.class);
InOrder inOrder = Mockito.inOrder(myObjectMock, myObjectRepositoryMock);
// Run Test .....
inOrder.verify(myObjectMock);
inOrder.verify(myObjectRepositoryMock).update(myObjectMock);
}
.. 但我们看到了这个异常:
.. UnfinishedVerificationException
Missing method call for verify(mock) here:
...
Example of correct verification:
verify(mock).doSomething()
由于我不必验证 setter 调用的顺序,我只需将它们组合在一起,然后说“首先是这个模拟,然后应该调用具有该参数的那个模拟的方法”..
我不想像这样定义确切的顺序:
inOrder.verify(myObjectMock).setX(..);
inOrder.verify(myObjectMock).setY(..);
inOrder.verify(myObjectRepositoryMock).update(myObjectMock);
有没有办法做到这一点?
【问题讨论】:
标签: java unit-testing junit mocking mockito