Java程序  |  82行  |  2.73 KB

package org.mockitousage.stubbing;

import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoSession;
import org.mockito.internal.framework.DefaultMockitoSession;
import org.mockito.internal.util.SimpleMockitoLogger;
import org.mockito.quality.Strictness;
import org.mockitousage.IMethods;

import static org.junit.Assert.assertEquals;
import static org.mockito.BDDMockito.given;
import static org.mockitoutil.TestBase.filterLineNo;

public class StubbingWarningsTest {

    @Mock IMethods mock;

    SimpleMockitoLogger logger = new SimpleMockitoLogger();
    MockitoSession mockito = new DefaultMockitoSession(this, Strictness.WARN, logger);

    @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] StubbingWarningsTest.null (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] StubbingWarningsTest.null (see javadoc for MockitoHint):\n" +
            "[MockitoHint] 1. Unused -> at org.mockitousage.stubbing.StubbingWarningsTest.unused_stubbing(StubbingWarningsTest.java:0)\n"),
                filterLineNo(logger.getLoggedInfo()));
    }
}