blob: 754b7dcd5fcd27dc867b81927bf3e9854f2a2751 [file] [log] [blame]
/*
* 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();
}
}