1 /* 2 * Copyright (c) 2007 Mockito contributors 3 * This program is made available under the terms of the MIT License. 4 */ 5 6 package org.mockitousage.strictness; 7 8 import org.assertj.core.api.ThrowableAssert; 9 import org.junit.Rule; 10 import org.junit.Test; 11 import org.mockito.Mock; 12 import org.mockito.exceptions.misusing.PotentialStubbingProblem; 13 import org.mockito.junit.MockitoJUnit; 14 import org.mockito.junit.MockitoRule; 15 import org.mockito.quality.Strictness; 16 import org.mockitousage.IMethods; 17 18 import static org.assertj.core.api.Assertions.assertThatThrownBy; 19 import static org.mockito.Mockito.lenient; 20 import static org.mockito.Mockito.mock; 21 import static org.mockito.Mockito.when; 22 import static org.mockito.Mockito.withSettings; 23 24 public class StrictnessWhenRuleStrictnessIsUpdatedTest { 25 26 @Mock IMethods mock; 27 @Rule public MockitoRule rule = MockitoJUnit.rule().strictness(Strictness.LENIENT); 28 29 @Test strictness_per_mock()30 public void strictness_per_mock() { 31 //when 32 rule.strictness(Strictness.STRICT_STUBS); 33 34 //then previous mock is strict: 35 when(mock.simpleMethod(1)).thenReturn("1"); 36 assertThatThrownBy(new ThrowableAssert.ThrowingCallable() { 37 @Override 38 public void call() throws Throwable { 39 mock.simpleMethod(2); 40 } 41 }).isInstanceOf(PotentialStubbingProblem.class); 42 43 //but the new mock is lenient, even though the rule is not: 44 final IMethods lenientMock = mock(IMethods.class, withSettings().lenient()); 45 when(lenientMock.simpleMethod(1)).thenReturn("1"); 46 lenientMock.simpleMethod(100); 47 } 48 49 @Test strictness_per_stubbing()50 public void strictness_per_stubbing() { 51 //when 52 rule.strictness(Strictness.STRICT_STUBS); 53 54 //then previous mock is strict: 55 when(mock.simpleMethod(1)).thenReturn("1"); 56 assertThatThrownBy(new ThrowableAssert.ThrowingCallable() { 57 @Override 58 public void call() throws Throwable { 59 mock.simpleMethod(2); 60 } 61 }).isInstanceOf(PotentialStubbingProblem.class); 62 63 //but the new mock is lenient, even though the rule is not: 64 lenient().when(mock.simpleMethod(1)).thenReturn("1"); 65 mock.simpleMethod(100); 66 } 67 } 68