gpt4 book ai didi

java - 如何在不显式定义方法顺序的情况下验证模拟的顺序?

转载 作者:行者123 更新时间:2023-12-02 04:47:34 24 4
gpt4 key购买 nike

这是要测试的方法:

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);

有办法做到这一点吗?

最佳答案

您可以使用 doAnswer() 内的 assertEquals 验证字段

object.setX(-1);
Mockito.doAnswer(new Answer<Void>() {
public Void answer(InvocationOnMock invocation) throws Throwable {
assertEquals(1, object.getX());
return null;
}
}).when(myObjectRepositoryMock).update(object);

这样,调用的顺序并不重要;重要的是在 update() 调用时,正确的值位于正确的位置。

关于java - 如何在不显式定义方法顺序的情况下验证模拟的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29538401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com