/* * Copyright (c) 2007 Mockito contributors * This program is made available under the terms of the MIT License. */ package org.mockitousage.strictness; import org.assertj.core.api.ThrowableAssert; import org.junit.Rule; import org.junit.Test; import org.mockito.Mock; import org.mockito.exceptions.misusing.PotentialStubbingProblem; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.mockito.quality.Strictness; import org.mockitousage.IMethods; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.when; public class StrictnessWithRulesTest { @Mock IMethods mock; @Rule public MockitoRule rule = MockitoJUnit.rule().strictness(Strictness.STRICT_STUBS); @Test public void potential_stubbing_problem() { //when when(mock.simpleMethod("1")).thenReturn("1"); lenient().when(mock.differentMethod("2")).thenReturn("2"); //then on lenient stubbing, we can call it with different argument: mock.differentMethod("200"); //but on strict stubbing, we cannot: assertThatThrownBy(new ThrowableAssert.ThrowingCallable() { @Override public void call() throws Throwable { mock.simpleMethod("100"); } }).isInstanceOf(PotentialStubbingProblem.class); //let's use the strict stubbing so that it is not reported as failure by the rule: mock.simpleMethod("1"); } @Test public void unnecessary_stubbing() { //this unnecessary stubbing is not flagged by the rule: lenient().when(mock.differentMethod("2")).thenReturn("2"); } }