blob: 4ce557ec66781ed89023f79f13c7ba6cccb98ca7 [file] [log] [blame]
/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockito.internal.verification.checkers;
import static java.util.Arrays.asList;
import java.util.List;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.mockito.Mock;
import org.mockito.exceptions.verification.WantedButNotInvoked;
import org.mockito.exceptions.verification.junit.ArgumentsAreDifferent;
import org.mockito.internal.invocation.InvocationBuilder;
import org.mockito.internal.invocation.InvocationMatcher;
import org.mockito.invocation.Invocation;
import org.mockitousage.IMethods;
import org.mockitoutil.TestBase;
public class MissingInvocationCheckerTest extends TestBase {
private InvocationMatcher wanted;
private List<Invocation> invocations;
@Mock
private IMethods mock;
@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void shouldPassBecauseActualInvocationFound() {
wanted = buildSimpleMethod().toInvocationMatcher();
invocations = asList(buildSimpleMethod().toInvocation());
MissingInvocationChecker.checkMissingInvocation(invocations, wanted);
}
@Test
public void shouldReportWantedButNotInvoked() {
wanted = buildSimpleMethod().toInvocationMatcher();
invocations = asList(buildDifferentMethod().toInvocation());
exception.expect(WantedButNotInvoked.class);
exception.expectMessage("Wanted but not invoked:");
exception.expectMessage("mock.simpleMethod()");
exception.expectMessage("However, there was exactly 1 interaction with this mock:");
exception.expectMessage("mock.differentMethod();");
MissingInvocationChecker.checkMissingInvocation(invocations, wanted);
}
@Test
public void shouldReportWantedInvocationDiffersFromActual() {
wanted = buildIntArgMethod().arg(2222).toInvocationMatcher();
invocations = asList(buildIntArgMethod().arg(1111).toInvocation());
exception.expect(ArgumentsAreDifferent.class);
exception.expectMessage("Argument(s) are different! Wanted:");
exception.expectMessage("mock.intArgumentMethod(2222);");
exception.expectMessage("Actual invocation has different arguments:");
exception.expectMessage("mock.intArgumentMethod(1111);");
MissingInvocationChecker.checkMissingInvocation(invocations, wanted);
}
private InvocationBuilder buildIntArgMethod() {
return new InvocationBuilder().mock(mock).method("intArgumentMethod").argTypes(int.class);
}
private InvocationBuilder buildSimpleMethod() {
return new InvocationBuilder().mock(mock).simpleMethod();
}
private InvocationBuilder buildDifferentMethod() {
return new InvocationBuilder().mock(mock).differentMethod();
}
}