1

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

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

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

4

2 回答 2

1

依靠。被测代码如何获取/使用工厂?

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

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

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

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

于 2008-11-10T23:50:04.063 回答
0

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

final FormatServiceFactory factory = mockery.mock(FormatServiceFactory .class);

context.checking(new Expectations() {{ oneOf (factory).getService(); will(returnValue(new FormatServiceMock())); }});

于 2010-01-21T08:43:54.780 回答