blob: d7c425f94a3fb790ac9d02ed2d19cdbc3b5acdad [file] [log] [blame]
package org.mockitousage.junitrunner;
import org.junit.Test;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.exceptions.misusing.UnfinishedStubbingException;
import org.mockito.internal.util.SimpleMockitoLogger;
import org.mockito.junit.TestableJUnitRunner;
import org.mockitousage.IMethods;
import org.mockitoutil.TestBase;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.mockitoutil.JUnitResultAssert.assertThat;
public class StubbingWarningsJUnitRunnerTest extends TestBase {
JUnitCore runner = new JUnitCore();
SimpleMockitoLogger logger = TestableJUnitRunner.refreshedLogger();
@Test public void no_arg_mismatch_warnings() {
//when
runner.run(PassingArgMismatch.class, FailingWithMatchingArgs.class, MismatchButStubAlreadyUsed.class);
//then
assertEquals("", filterLineNo(logger.getLoggedInfo()));
}
@Test public void shows_arg_mismatch_warnings_when_test_fails() {
//when
runner.run(FailingWithArgMismatch.class);
//then
assertEquals("[MockitoHint] FailingWithArgMismatch.test (see javadoc for MockitoHint):\n" +
"[MockitoHint] 1. Unused... -> at org.mockitousage.junitrunner.StubbingWarningsJUnitRunnerTest$FailingWithArgMismatch.test(StubbingWarningsJUnitRunnerTest.java:0)\n" +
"[MockitoHint] ...args ok? -> at org.mockitousage.junitrunner.StubbingWarningsJUnitRunnerTest$FailingWithArgMismatch.test(StubbingWarningsJUnitRunnerTest.java:0)\n", filterLineNo(logger.getLoggedInfo()));
}
@Test public void shows_arg_mismatch_warnings_only_for_mismatches() {
//when
runner.run(FailingWithSomeStubMismatches.class);
//then
assertEquals("[MockitoHint] FailingWithSomeStubMismatches.test (see javadoc for MockitoHint):\n" +
"[MockitoHint] 1. Unused... -> at org.mockitousage.junitrunner.StubbingWarningsJUnitRunnerTest$FailingWithSomeStubMismatches.test(StubbingWarningsJUnitRunnerTest.java:0)\n" +
"[MockitoHint] ...args ok? -> at org.mockitousage.junitrunner.StubbingWarningsJUnitRunnerTest$FailingWithSomeStubMismatches.test(StubbingWarningsJUnitRunnerTest.java:0)\n", filterLineNo(logger.getLoggedInfo()));
}
@Test public void validates_mockito_usage() {
//when
Result result = runner.run(InvalidMockitoUsage.class);
//then
assertThat(result).fails(1, UnfinishedStubbingException.class);
}
@RunWith(TestableJUnitRunner.class)
public static class PassingArgMismatch {
IMethods mock = mock(IMethods.class);
@Test public void test() throws Exception {
when(mock.simpleMethod(1)).thenReturn("1");
mock.simpleMethod(2);
}
}
@RunWith(TestableJUnitRunner.class)
public static class FailingWithArgMismatch {
@Mock IMethods mock;
@Test public void test() throws Exception {
when(mock.simpleMethod(1)).thenReturn("1");
mock.simpleMethod(2);
throw new RuntimeException("x");
}
}
@RunWith(TestableJUnitRunner.class)
public static class FailingWithMatchingArgs {
@Mock IMethods mock;
@Test public void test() throws Exception {
when(mock.simpleMethod(1)).thenReturn("1");
mock.simpleMethod(1);
throw new RuntimeException("x");
}
}
@RunWith(TestableJUnitRunner.class)
public static class FailingWithSomeStubMismatches {
@Mock IMethods mock;
@Test public void test() throws Exception {
when(mock.simpleMethod(1)).thenReturn("1"); // <- used
when(mock.simpleMethod(2)).thenReturn("2"); // <- unused
mock.simpleMethod(1); // <- not reported
mock.simpleMethod(3); // <- reported
throw new RuntimeException("x");
}
}
@RunWith(TestableJUnitRunner.class)
public static class MismatchButStubAlreadyUsed {
@Mock IMethods mock;
@Test public void test() throws Exception {
when(mock.simpleMethod(1)).thenReturn("1");
mock.simpleMethod(1); // <-- used
mock.simpleMethod(2); // <-- arg mismatch, but the stub was already used
throw new RuntimeException("x");
}
}
@RunWith(TestableJUnitRunner.class)
public static class InvalidMockitoUsage {
@Mock IMethods mock;
@Test public void test() throws Exception {
when(mock.simpleMethod()); // <-- unfinished stubbing
}
}
}