gpt4 book ai didi

java - 使用 Mockito 验证多个方法调用的顺序

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:43 28 4
gpt4 key购买 nike

我有一个 Person 类,它有两个值,年龄和姓名,我正在使用 Mockito 进行一些测试以用于学习目的。

我的测试方法是这样的:

        @Test()
public void testFive(){
Person mockedPerson = Mockito.mock(Person.class);
Mockito.when(mockedPerson.getAge()).thenReturn(1,2,3);
Mockito.when(mockedPerson.getName()).thenReturn("1","2","3");

InOrder inOrder = Mockito.inOrder(mockedPerson);

mockedPerson.getAge();
mockedPerson.getAge();
mockedPerson.getAge();

mockedPerson.getName();
mockedPerson.getName();
mockedPerson.getName();

inOrder.verify(mockedPerson).getAge();
inOrder.verify(mockedPerson).getAge();
inOrder.verify(mockedPerson).getAge();
inOrder.verify(mockedPerson).getName();
inOrder.verify(mockedPerson).getName();
inOrder.verify(mockedPerson).getName();
}

我需要测试 getAge() 方法被调用了 3 次,然后 getName() 方法被调用了 3 次。

我遇到了这个异常:

org.mockito.exceptions.verification.VerificationInOrderFailure: Verification in order failure: person.getAge(); Wanted 1 time:

最佳答案

你的验证应该是这样的:

        inOrder.verify(mockedPerson, times(3)).getAge();
inOrder.verify(mockedPerson, times(3)).getName();

如果你在测试中有更多的调用,应该是这样的:

    @Test
public void testFive(){
Person mockedPerson = Mockito.mock(Person.class);
Mockito.when(mockedPerson.getAge()).thenReturn(1,2,3,4);
Mockito.when(mockedPerson.getName()).thenReturn("1","2","3");

InOrder inOrder = Mockito.inOrder(mockedPerson);

mockedPerson.getAge();
mockedPerson.getAge();
mockedPerson.getAge();

mockedPerson.getName();
mockedPerson.getName();
mockedPerson.getName();

mockedPerson.getAge();


inOrder.verify(mockedPerson, times(3)).getAge();
inOrder.verify(mockedPerson, times(3)).getName();
inOrder.verify(mockedPerson, times(1)).getAge();
}

发生的情况是调用不带第二个参数的验证仅验证 1 次调用(就好像您编写了 times(1)),并且由于您调用了 3 次它失败了。

这就是为什么我喜欢总是添加 times(x),它使事情变得明确。

关于java - 使用 Mockito 验证多个方法调用的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56781069/

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