我有一个返回接口的工厂FormatService
:
public class FormatServiceFactory {
public FormatService getService() {
...
}
}
是否可以模拟这个工厂,以便它在我们的单元测试中 始终返回FormatService
-的存根实现?FormatServiceStub
我有一个返回接口的工厂FormatService
:
public class FormatServiceFactory {
public FormatService getService() {
...
}
}
是否可以模拟这个工厂,以便它在我们的单元测试中 始终返回FormatService
-的存根实现?FormatServiceStub
依靠。被测代码如何获取/使用工厂?
如果它在您正在测试的方法中显式实例化,或者它是一个静态工厂,您将无法模拟它。
如果它被注入到被测对象中,您可以在执行测试之前创建并注入模拟工厂。
使用 JMock 模拟工厂应该很容易。从您的示例代码中,它看起来像是一个类,而不是一个接口,因此您需要使用 JMock 的 cglib 版本和JMock 1 的 cglib 包中的MockObjectTestCase类,或者 JMock 2 的ClassImposteriser。
一旦被模拟,当您定义 getService() 方法的期望时,您可以让它返回您的存根实现(甚至是模拟 FormatService)。
嘲讽嘲讽 = new JUnit4Mockery() {{setImposteriser(ClassImposteriser.INSTANCE);}};
final FormatServiceFactory factory = mockery.mock(FormatServiceFactory .class);
context.checking(new Expectations() {{ oneOf (factory).getService(); will(returnValue(new FormatServiceMock())); }});