/* * Copyright (c) 2017 Mockito contributors * This program is made available under the terms of the MIT License. */ package org.mockitousage.stubbing; import org.junit.After; import org.junit.Test; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoSession; import org.mockito.exceptions.misusing.PotentialStubbingProblem; import org.mockito.exceptions.misusing.UnnecessaryStubbingException; import org.mockito.exceptions.verification.NoInteractionsWanted; import org.mockito.quality.Strictness; import org.mockitousage.IMethods; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockitoutil.ThrowableAssert.assertThat; public class StrictStubbingTest { @Mock IMethods mock; MockitoSession mockito = Mockito.mockitoSession().initMocks(this).strictness(Strictness.STRICT_STUBS).startMocking(); @After public void after() { //Some tests already invoke below but that's ok mockito.finishMocking(); } @Test public void no_interactions() throws Throwable { //expect no exception mockito.finishMocking(); } @Test public void few_interactions() throws Throwable { mock.simpleMethod(100); mock.otherMethod(); } @Test public void few_verified_interactions() throws Throwable { //when mock.simpleMethod(100); mock.otherMethod(); //and verify(mock).simpleMethod(100); verify(mock).otherMethod(); verifyNoMoreInteractions(mock); } @Test public void stubbed_method_is_implicitly_verified() throws Throwable { //when given(mock.simpleMethod(100)).willReturn("100"); mock.simpleMethod(100); //no exceptions: verifyNoMoreInteractions(mock); } @Test public void unused_stubbed_is_not_implicitly_verified() throws Throwable { //when given(mock.simpleMethod(100)).willReturn("100"); mock.simpleMethod(100); // <- implicitly verified mock.simpleMethod(200); // <- unverified //expect assertThat(new Runnable() { public void run() { verifyNoMoreInteractions(mock); } }).throwsException(NoInteractionsWanted.class); } @Test public void stubbing_argument_mismatch() throws Throwable { //when given(mock.simpleMethod(100)).willReturn("100"); //stubbing argument mismatch is detected assertThat(new Runnable() { public void run() { mock.simpleMethod(200); } }).throwsException(PotentialStubbingProblem.class); } @Test public void unused_stubbing() throws Throwable { //when given(mock.simpleMethod(100)).willReturn("100"); //unused stubbing is reported assertThat(new Runnable() { public void run() { mockito.finishMocking(); } }).throwsException(UnnecessaryStubbingException.class); } }