package org.mockitousage.junitrule; import org.junit.Rule; import org.junit.Test; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.mockito.quality.Strictness; import org.mockitousage.IMethods; import org.mockitoutil.JUnitResultAssert; import static org.mockito.Mockito.when; public class MutableStrictJUnitRuleTest { JUnitCore runner = new JUnitCore(); @Test public void rule_can_be_changed_to_strict() throws Throwable { //when Result result = runner.run(LenientByDefault.class); //then JUnitResultAssert.assertThat(result) .succeeds(1) .fails(1, RuntimeException.class); } @Test public void rule_can_be_changed_to_lenient() throws Throwable { //when Result result = runner.run(StrictByDefault.class); //then JUnitResultAssert.assertThat(result) .succeeds(1) .fails(1, RuntimeException.class); } public static class LenientByDefault { @Rule public MockitoRule mockito = MockitoJUnit.rule().strictness(Strictness.LENIENT); @Mock IMethods mock; @Test public void unused_stub() throws Throwable { when(mock.simpleMethod()).thenReturn("1"); } @Test public void unused_stub_with_strictness() throws Throwable { //making Mockito lenient only for this test method mockito.strictness(Strictness.STRICT_STUBS); when(mock.simpleMethod()).thenReturn("1"); } } public static class StrictByDefault { @Rule public MockitoRule mockito = MockitoJUnit.rule().strictness(Strictness.STRICT_STUBS); @Mock IMethods mock; @Test public void unused_stub() throws Throwable { when(mock.simpleMethod()).thenReturn("1"); } @Test public void unused_stub_with_lenient() throws Throwable { //making Mockito lenient only for this test method mockito.strictness(Strictness.LENIENT); when(mock.simpleMethod()).thenReturn("1"); } } }