mocktest.java

来自「不管是测试驱动开发或者是其它的开发模式」· Java 代码 · 共 171 行

JAVA
171
字号
/*  Copyright (c) 2000-2004 jMock.org
 */
package test.jmock;

import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
import org.jmock.Mock;
import org.jmock.core.InvocationMatcher;
import org.jmock.core.Invokable;
import org.jmock.expectation.AssertMo;
import test.jmock.builder.testsupport.MockMatchBuilder;
import test.jmock.core.DummyInterface;
import test.jmock.core.testsupport.MockDynamicMock;
import test.jmock.core.testsupport.MockInvocationMatcher;
import test.jmock.core.testsupport.MockInvokable;
import test.jmock.core.testsupport.MockStub;


public class MockTest extends TestCase
{

    private MockDynamicMock mockCoreMock = new MockDynamicMock();
    private Mock mock = new Mock(mockCoreMock);

    public void testToStringComesFromUnderlyingDynamicMock() {
        mockCoreMock.toStringResult = "some string here";
        assertEquals("Should be same string", "some string here", mock.toString());
    }

    public void testPassesExplicitNameToCoreMock() {
        String explicitName = "EXPLICIT NAME";

        assertEquals("should be explicit name", explicitName,
                     new Mock(DummyInterface.class, explicitName).toString());
    }

    public void testDelegatgesResetToCoreMock() {
        mockCoreMock.resetCalls.setExpected(1);

        mock.reset();

        mockCoreMock.verifyExpectations();
    }

    public void testDelegatesAddInvokableToCoreMock() {
        Invokable invokable = new MockInvokable();

        mockCoreMock.addInvokableCalls.setExpected(1);
        mockCoreMock.addInvokable.setExpected(invokable);

        mock.addInvokable(invokable);

        mockCoreMock.verifyExpectations();
    }

    public void testStubAddsInvocationMockerAndReturnsBuilder() {
        mockCoreMock.addInvokableCalls.setExpected(1);

        assertNotNull("Should be invokedMethod expectation", mock.stubs());
        mockCoreMock.verifyExpectations();
    }

    public void testExpectAddsInvocationMockerAndAddsExpectationAndReturnsBuilder() {
        InvocationMatcher expectation = new MockInvocationMatcher();

        mockCoreMock.addInvokableCalls.setExpected(1);

        assertNotNull("Should be invokedMethod expectation", mock.expects(expectation));
        mockCoreMock.verifyExpectations();
    }

    public void testVerifyCallsUnderlyingMock() {
        mockCoreMock.verifyCalls.setExpected(1);

        mock.verify();

        mockCoreMock.verifyExpectations();
    }

    private interface MockedType
    {
    }

    public void testReportsTypesMockedByUnderlyingMock() {
        mockCoreMock.getMockedTypeCalls.setExpected(1);
        mockCoreMock.getMockedTypeResult = MockedType.class;

        AssertMo.assertSame("mocked types",
                            MockedType.class, mock.getMockedType());
    }

    public void testPassesDefaultStubToCoreMock() {
        MockStub mockDefaultStub = new MockStub();

        mockCoreMock.setDefaultStub.setExpected(mockDefaultStub);

        mock.setDefaultStub(mockDefaultStub);

        mockCoreMock.verifyExpectations();
    }


    static final String BUILDER_ID = "BUILDER-ID";

    public void testStoresExpectationBuildersByID() {
        MockMatchBuilder builder1 = new MockMatchBuilder();
        MockMatchBuilder builder2 = new MockMatchBuilder();

        mock.registerUniqueID(BUILDER_ID + 1, builder1);
        mock.registerUniqueID(BUILDER_ID + 2, builder2);

        assertSame("should be builder1",
                   builder1, mock.lookupID(BUILDER_ID + 1));
        assertSame("should be builder2",
                   builder2, mock.lookupID(BUILDER_ID + 2));
    }

    public void testFailsOnLookingUpUnregisteredID() {
        try {
            mock.lookupID(BUILDER_ID);
        }
        catch (AssertionFailedError ex) {
            assertTrue("error message should contain invalid id",
                       ex.getMessage().indexOf(BUILDER_ID) >= 0);
            return;
        }
        fail("expected AssertionFailedError");
    }

    public void testMethodNamesCanBeUsedToNameBuildersInAdditionToUniqueID() {
        MockMatchBuilder builder1 = new MockMatchBuilder();
        MockMatchBuilder builder2 = new MockMatchBuilder();

        mock.registerMethodName(BUILDER_ID + 1, builder1);
        mock.registerMethodName(BUILDER_ID + 2, builder2);

        assertSame("should be builder1",
                   builder1, mock.lookupID(BUILDER_ID + 1));
        assertSame("should be builder2",
                   builder2, mock.lookupID(BUILDER_ID + 2));
    }

    public void testDuplicateMethodNameOverridesPreviousMapping() {
        MockMatchBuilder builder1 = new MockMatchBuilder();
        MockMatchBuilder builder2 = new MockMatchBuilder();

        mock.registerMethodName(BUILDER_ID, builder1);
        mock.registerMethodName(BUILDER_ID, builder2);

        assertSame("builder2", builder2, mock.lookupID(BUILDER_ID));
    }

    public void testDuplicateUniqueIDCausesTestFailure() {
        MockMatchBuilder builder1 = new MockMatchBuilder();
        MockMatchBuilder builder2 = new MockMatchBuilder();

        mock.registerUniqueID(BUILDER_ID, builder1);
        try {
            mock.registerUniqueID(BUILDER_ID, builder2);
        }
        catch (AssertionFailedError ex) {
            AssertMo.assertIncludes("should contain invalid ID",
                                    BUILDER_ID, ex.getMessage());
            return;
        }

        fail("expected failure");
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?