/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockitousage.verification;
import org.junit.Test;
import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.exceptions.misusing.UnfinishedVerificationException;
import org.mockito.exceptions.verification.VerificationInOrderFailure;
import org.mockitousage.IMethods;
import org.mockitoutil.TestBase;
import static junit.framework.TestCase.fail;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.verify;
public class FindingRedundantInvocationsInOrderTest extends TestBase {
@Mock private IMethods mock;
@Mock private IMethods mock2;
@Test
public void shouldWorkFineIfNoInvocatins() throws Exception {
//when
InOrder inOrder = inOrder(mock);
//then
inOrder.verifyNoMoreInteractions();
}
@Test
public void shouldSayNoInteractionsWanted() throws Exception {
//when
mock.simpleMethod();
//then
InOrder inOrder = inOrder(mock);
try {
inOrder.verifyNoMoreInteractions();
fail();
} catch(VerificationInOrderFailure e) {
assertThat(e).hasMessageContaining("No interactions wanted");
}
}
@Test
public void shouldVerifyNoMoreInteractionsInOrder() throws Exception {
//when
mock.simpleMethod();
mock.simpleMethod(10);
mock.otherMethod();
//then
InOrder inOrder = inOrder(mock);
inOrder.verify(mock).simpleMethod(10);
inOrder.verify(mock).otherMethod();
inOrder.verifyNoMoreInteractions();
}
@Test
public void shouldVerifyNoMoreInteractionsInOrderWithMultipleMocks() throws Exception {
//when
mock.simpleMethod();
mock2.simpleMethod();
mock.otherMethod();
//then
InOrder inOrder = inOrder(mock, mock2);
inOrder.verify(mock2).simpleMethod();
inOrder.verify(mock).otherMethod();
inOrder.verifyNoMoreInteractions();
}
@Test
public void shouldFailToVerifyNoMoreInteractionsInOrder() throws Exception {
//when
mock.simpleMethod();
mock.simpleMethod(10);
mock.otherMethod();
//then
InOrder inOrder = inOrder(mock);
inOrder.verify(mock).simpleMethod(10);
try {
inOrder.verifyNoMoreInteractions();
fail();
} catch(VerificationInOrderFailure e) {}
}
@Test
public void shouldFailToVerifyNoMoreInteractionsInOrderWithMultipleMocks() throws Exception {
//when
mock.simpleMethod();
mock2.simpleMethod();
mock.otherMethod();
//then
InOrder inOrder = inOrder(mock, mock2);
inOrder.verify(mock2).simpleMethod();
try {
inOrder.verifyNoMoreInteractions();
fail();
} catch(VerificationInOrderFailure e) {}
}
@Test
public void shouldValidateState() throws Exception {
//when
InOrder inOrder = inOrder(mock);
verify(mock); // mess up state
//then
try {
inOrder.verifyNoMoreInteractions();
fail();
} catch(UnfinishedVerificationException e) {}
}
}