【问题标题】:Can I use jmock to replace an implementation returned by a factory?我可以使用 jmock 替换工厂返回的实现吗?
【发布时间】:2008-11-10 23:07:48
【问题描述】:

我有一个返回接口FormatService的工厂:

public class FormatServiceFactory {
    public FormatService getService() {
        ...
    }
}

是否可以模拟这个工厂,以便它在我们的单元测试中总是返回 FormatService - FormatServiceStub 的存根实现?

【问题讨论】:

    标签: java unit-testing interface mocking


    【解决方案1】:

    视情况而定。被测代码如何获取/使用工厂?

    如果它在您正在测试的方法中显式实例化,或者如果它是一个静态工厂,您将无法模拟它。

    如果被注入到被测对象中,你可以在执行测试之前创建并注入模拟工厂。

    使用 JMock 模拟工厂应该很容易。从您的示例代码来看,它看起来像是一个类,而不是一个接口,因此您需要使用 JMock 的 cglib 版本和 JMock 1 的 cglib 包中的 MockObjectTestCase 类,或者 JMock 的 ClassImposteriser 2.

    一旦被模拟,当您定义 getService() 方法的期望时,您可以让它返回您的存根实现(甚至是模拟 FormatService)。

    【讨论】:

      【解决方案2】:

      嘲讽嘲讽 = new JUnit4Mockery() {{setImposteriser(ClassImposteriser.INSTANCE);}};

      最终的 FormatServiceFactory 工厂 = mockery.mock(FormatServiceFactory .class);

      context.checking(新期望() {{ oneOf(工厂).getService(); will(returnValue(new FormatServiceMock())); }});

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-22
        • 1970-01-01
        • 2017-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多