我在解析器中有一个工厂方法。 基本上当我加载一个令牌时,我会查找该令牌的处理程序,或者直接进入默认处理程序。 我已经将它实现为一个switch和一个Dictionary<string,Type>但这两种方法都要求我将映射存储在除处理程序类之外的其他地方。 我们正在使用Nin ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我有一个返回接口FormatService
的工厂:
public class FormatServiceFactory {
public FormatService getService() {
...
}
}
是否可以模拟该工厂,以便在我们的单元测试中始终返回FormatService
- FormatServiceStub
的存根实现?
要看。 被测代码如何获得/使用工厂?
如果在您要测试的方法中显式实例化了它,或者它是一个静态工厂,则将无法对其进行模拟。
如果将其注入到测试对象中,则可以在执行测试之前创建并注入模拟工厂。
使用JMock模拟工厂应该很容易。 从示例代码来看,它看起来像是一个类,而不是接口,因此您需要在JMock 1的cglib软件包中使用JMock的cglib版本和MockObjectTestCase类,在JMock 2的ClassImposteriser中使用。
一旦被模拟,您可以在定义getService()方法的期望时使其返回已存根的实现(甚至是模拟FormatService)。
模拟嘲笑= new JUnit4Mockery(){{setImposteriser(ClassImposteriser.INSTANCE);}};
最终的FormatServiceFactory工厂= mockery.mock(FormatServiceFactory .class);
context.checking(new Expectations(){{oneOf(factory).getService(); will(returnValue(new FormatServiceMock()));}}));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.