| /* |
| * Copyright (c) 2018 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.MockitoSession; |
| import org.mockito.StateMaster; |
| import org.mockito.exceptions.base.MockitoException; |
| import org.mockito.internal.framework.DefaultMockitoSession; |
| import org.mockito.internal.util.SimpleMockitoLogger; |
| import org.mockito.quality.Strictness; |
| import org.mockitousage.IMethods; |
| |
| import static java.util.Collections.singletonList; |
| import static org.junit.Assert.assertEquals; |
| import static org.mockito.BDDMockito.given; |
| import static org.mockito.Mockito.verify; |
| import static org.mockitoutil.TestBase.filterLineNo; |
| |
| public class StubbingWarningsTest { |
| |
| private static final String TEST_NAME = "test.name"; |
| |
| @Mock IMethods mock; |
| |
| SimpleMockitoLogger logger = new SimpleMockitoLogger(); |
| MockitoSession mockito = new DefaultMockitoSession(singletonList((Object) this), TEST_NAME, Strictness.WARN, logger); |
| |
| @After public void after() { |
| StateMaster stateMaster = new StateMaster(); |
| stateMaster.reset(); |
| stateMaster.clearMockitoListeners(); |
| } |
| |
| @Test public void few_interactions() throws Throwable { |
| //when |
| mock.simpleMethod(100); |
| mock.otherMethod(); |
| |
| //expect no exception |
| mockito.finishMocking(); |
| logger.assertEmpty(); |
| } |
| |
| @Test public void stubbing_used() throws Throwable { |
| //when |
| given(mock.simpleMethod(100)).willReturn("100"); |
| mock.simpleMethod(100); |
| |
| //then |
| mockito.finishMocking(); |
| logger.assertEmpty(); |
| } |
| |
| @Test public void unused_stubbed_is_not_implicitly_verified() throws Throwable { |
| //when |
| given(mock.simpleMethod(100)).willReturn("100"); |
| mock.simpleMethod(100); // <- stubbing is used |
| mock.simpleMethod(200); // <- other method should not generate arg mismatch |
| |
| //then |
| mockito.finishMocking(); |
| logger.assertEmpty(); |
| } |
| |
| @Test public void stubbing_argument_mismatch() throws Throwable { |
| //when |
| given(mock.simpleMethod(100)).willReturn("100"); |
| mock.simpleMethod(200); |
| |
| mockito.finishMocking(); |
| |
| //TODO - currently we warn about "Unused" instead of "Arg mismatch" below |
| //because it was simpler to implement. This can be improved given we put priority to improve the warnings. |
| //then |
| assertEquals(filterLineNo( |
| "[MockitoHint] " + TEST_NAME + " (see javadoc for MockitoHint):\n" + |
| "[MockitoHint] 1. Unused -> at org.mockitousage.stubbing.StubbingWarningsTest.stubbing_argument_mismatch(StubbingWarningsTest.java:0)\n"), |
| filterLineNo(logger.getLoggedInfo())); |
| } |
| |
| @Test public void unused_stubbing() throws Throwable { |
| //when |
| given(mock.simpleMethod(100)).willReturn("100"); |
| |
| mockito.finishMocking(); |
| |
| //then |
| assertEquals(filterLineNo( |
| "[MockitoHint] " + TEST_NAME + " (see javadoc for MockitoHint):\n" + |
| "[MockitoHint] 1. Unused -> at org.mockitousage.stubbing.StubbingWarningsTest.unused_stubbing(StubbingWarningsTest.java:0)\n"), |
| filterLineNo(logger.getLoggedInfo())); |
| } |
| |
| @Test(expected = MockitoException.class) public void unfinished_verification_without_throwable() throws Throwable { |
| //when |
| verify(mock); |
| |
| mockito.finishMocking(); |
| } |
| |
| @Test public void unfinished_verification_with_throwable() throws Throwable { |
| //when |
| verify(mock); |
| |
| mockito.finishMocking(new AssertionError()); |
| |
| // then |
| logger.assertEmpty(); |
| } |
| } |