我有一个具有两个值,年龄和名称的班级人员,我正在使用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次:
您的验证应该是这样的:
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)
,它使事情显式。