package org.mockito.internal.junit; import org.junit.Rule; import org.junit.Test; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.exceptions.misusing.UnfinishedStubbingException; import org.mockito.junit.MockitoJUnit; import org.mockitousage.IMethods; import org.mockitoutil.SafeJUnitRule; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mockingDetails; import static org.mockito.Mockito.when; public class JUnitRuleTest { @Rule public SafeJUnitRule rule = new SafeJUnitRule(MockitoJUnit.rule()); @Mock IMethods mock; @Test public void injects_into_test_case() throws Throwable { assertTrue(mockingDetails(mock).isMock()); } @Test public void rethrows_exception() throws Throwable { rule.expectFailure(RuntimeException.class, "foo"); throw new RuntimeException("foo"); } @Test public void detects_invalid_mockito_usage_on_success() throws Throwable { rule.expectFailure(UnfinishedStubbingException.class); when(mock.simpleMethod()); } @Test public void does_not_check_invalid_mockito_usage_on_failure() throws Throwable { //This intended behavior is questionable //However, it was like that since the beginning of JUnit rule support //Users never questioned this behavior. Hence, let's stick to it unless we have more data rule.expectFailure(RuntimeException.class, "foo"); Mockito.when(mock.simpleMethod()); // <--- unfinished stubbing throw new RuntimeException("foo"); // <--- some failure } }