Reputation: 1906
I have a class Person that has two values, age and name, I'm doing some tests using Mockito for learning purpose.
My test method looks like:
@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();
}
I need to test that the getAge() method was called three times, and followed by three call to the getName() method.
I'm getting this exception:
org.mockito.exceptions.verification.VerificationInOrderFailure: Verification in order failure: person.getAge(); Wanted 1 time:
Upvotes: 4
Views: 1855
Reputation: 3343
Your verifications should be like this:
inOrder.verify(mockedPerson, times(3)).getAge();
inOrder.verify(mockedPerson, times(3)).getName();
If you had more calls in the test, it should be this way:
@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();
}
What happens is that calling verify with no second argument verifies 1 call only (as if you wrote times(1)
), and since you called 3 times it fails.
This is why I like to always add the times(x)
, it makes things explicit.
Upvotes: 4