我有一个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()方法是否被调用了三次,然后调用了getName()方法了三遍。
我遇到此异常:
org.mockito.exceptions.verification.VerificationInOrderFailure: 验证订单失败:person.getAge();想要1次:
答案 0 :(得分:3)
您的验证应如下所示:
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();
}
发生的事情是,不带第二个参数的调用verify只能验证1个调用(就像您写了times(1)
一样),并且由于调用了3次而失败。
这就是为什么我总是喜欢添加times(x)
,这使事情变得很明确。