blob: f6fe0942c1c87cba71be72b418b506d5bdd1a441 [file] [log] [blame]
/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockitousage.verification;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InOrder;
import org.mockito.Mockito;
import org.mockito.exceptions.verification.VerificationInOrderFailure;
import org.mockito.exceptions.verification.WantedButNotInvoked;
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.*;
public class DescriptiveMessagesOnVerificationInOrderErrorsTest extends TestBase {
private IMethods one;
private IMethods two;
private IMethods three;
private InOrder inOrder;
@Before
public void setup() {
one = Mockito.mock(IMethods.class);
two = Mockito.mock(IMethods.class);
three = Mockito.mock(IMethods.class);
one.simpleMethod(1);
one.simpleMethod(11);
two.simpleMethod(2);
two.simpleMethod(2);
three.simpleMethod(3);
inOrder = inOrder(one, two, three);
}
@Test
public void shouldPrintVerificationInOrderErrorAndShowBothWantedAndPrevious() {
inOrder.verify(one).simpleMethod(1);
inOrder.verify(two, atLeastOnce()).simpleMethod(2);
try {
inOrder.verify(one, atLeastOnce()).simpleMethod(11);
fail();
} catch (VerificationInOrderFailure e) {
String expected =
"\n" +
"Verification in order failure" +
"\n" +
"Wanted but not invoked:" +
"\n" +
"iMethods.simpleMethod(11);" +
"\n" +
"-> at ";
assertThat(e).hasMessageContaining(expected);
String expectedCause =
"\n" +
"Wanted anywhere AFTER following interaction:" +
"\n" +
"iMethods.simpleMethod(2);" +
"\n" +
"-> at ";
assertThat(e).hasMessageContaining(expectedCause);
}
}
@Test
public void shouldPrintVerificationInOrderErrorAndShowWantedOnly() {
try {
inOrder.verify(one).differentMethod();
fail();
} catch (WantedButNotInvoked e) {
String expected =
"\n" +
"Wanted but not invoked:" +
"\n" +
"iMethods.differentMethod();" +
"\n" +
"-> at";
assertThat(e).hasMessageContaining(expected);
}
}
@Test
public void shouldPrintVerificationInOrderErrorAndShowWantedAndActual() {
try {
inOrder.verify(one).simpleMethod(999);
fail();
} catch (org.mockito.exceptions.verification.junit.ArgumentsAreDifferent e) {
assertThat(e).hasMessageContaining("has different arguments");
}
}
@Test
public void shouldNotSayArgumentsAreDifferent() {
//this is the last invocation so any next verification in order should simply say wanted but not invoked
inOrder.verify(three).simpleMethod(3);
try {
inOrder.verify(one).simpleMethod(999);
fail();
} catch (VerificationInOrderFailure e) {
assertThat(e).hasMessageContaining("Wanted but not invoked");
}
}
@Test
public void shouldPrintMethodThatWasNotInvoked() {
inOrder.verify(one).simpleMethod(1);
inOrder.verify(one).simpleMethod(11);
inOrder.verify(two, times(2)).simpleMethod(2);
inOrder.verify(three).simpleMethod(3);
try {
inOrder.verify(three).simpleMethod(999);
fail();
} catch (VerificationInOrderFailure e) {
String expectedMessage =
"\n" +
"Verification in order failure" +
"\n" +
"Wanted but not invoked:" +
"\n" +
"iMethods.simpleMethod(999);";
assertThat(e).hasMessageContaining(expectedMessage);
}
}
@Test
public void shouldPrintTooManyInvocations() {
inOrder.verify(one).simpleMethod(1);
inOrder.verify(one).simpleMethod(11);
try {
inOrder.verify(two, times(1)).simpleMethod(2);
fail();
} catch (VerificationInOrderFailure e) {
String expectedMessage =
"\n" +
"Verification in order failure:" +
"\n" +
"iMethods.simpleMethod(2);" +
"\n" +
"Wanted 1 time:" +
"\n" +
"-> at";
assertThat(e).hasMessageContaining(expectedMessage);
String expectedCause =
"\n" +
"But was 2 times. Undesired invocation:" +
"\n" +
"-> at";
assertThat(e).hasMessageContaining(expectedCause);
}
}
@Test
public void shouldPrintTooLittleInvocations() {
two.simpleMethod(2);
inOrder.verify(one, atLeastOnce()).simpleMethod(anyInt());
inOrder.verify(two, times(2)).simpleMethod(2);
inOrder.verify(three, atLeastOnce()).simpleMethod(3);
try {
inOrder.verify(two, times(2)).simpleMethod(2);
fail();
} catch (VerificationInOrderFailure e) {
String expectedMessage =
"\n" +
"Verification in order failure:" +
"\n" +
"iMethods.simpleMethod(2);" +
"\n" +
"Wanted 2 times:" +
"\n" +
"-> at";
assertThat(e).hasMessageContaining(expectedMessage);
String expectedCause =
"\n" +
"But was 1 time:" +
"\n" +
"-> at";
assertThat(e).hasMessageContaining(expectedCause);
}
}
}