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.PotentialStubbingProblem;
import org.mockito.exceptions.misusing.UnnecessaryStubbingException;
import org.mockito.junit.MockitoJUnitRunner;
import org.mockitousage.IMethods;
import org.mockitoutil.JUnitResultAssert;
import org.mockitoutil.TestBase;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
public class StrictStubsRunnerTest extends TestBase {
JUnitCore runner = new JUnitCore();
@Test public void detects_unnecessary_stubbings() {
//when
Result result = runner.run(UnnecessaryStubbing.class);
//then
JUnitResultAssert.assertThat(result)
.fails(1, UnnecessaryStubbingException.class)
.succeeds(2);
}
@Test public void fails_fast_on_argument_mismatch() {
//when
Result result = runner.run(StubbingArgMismatch.class);
//then
JUnitResultAssert.assertThat(result)
.succeeds(2)
.fails(1, PotentialStubbingProblem.class);
}
@RunWith(MockitoJUnitRunner.StrictStubs.class)
public static class UnnecessaryStubbing {
@Mock IMethods mock;
@Test public void unused_stubbing_1() {
when(mock.simpleMethod()).thenReturn("");
}
@Test public void unused_stubbing_2() {
when(mock.simpleMethod()).thenReturn("");
}
@Test public void correct_stubbing() {
when(mock.simpleMethod()).thenReturn("");
mock.simpleMethod();
}
}
@RunWith(MockitoJUnitRunner.StrictStubs.class)
public static class StubbingArgMismatch {
@Mock IMethods mock;
@Test public void passing1() {}
@Test public void passing2() {
when(mock.simpleMethod()).thenReturn("");
mock.simpleMethod();
}
@Test public void argument_mismatch() {
when(mock.simpleMethod(10)).thenReturn("");
mock.simpleMethod(20);
}
}
}