我想知道如果您使用的库不使用接口
,如何测试您的方法
我的课就像
private ThirdParyClass thirdPartyClass;
void myMethod() {
AnotherThirdPartyClass param = "abc";
...
thirdPartyClass.execute(param);
}
我想测试使用“abc”参数调用execute。
我正在考虑使用包装ThirdPartyClass的实现创建MyInterface,然后更改class属性以引用MyInterface。相当无聊的东西,但我没有看到任何其他方式能够成功测试我的课程 如果ThirdParyClass是一个接口,我可以嘲笑它,但在这种情况下,你如何处理?
答案 0 :(得分:1)
我不知道你使用哪个模拟实现。但是EasyMock在EasyMock主页上有一个扩展,可以为类生成模拟对象。请参阅您的模拟实现,它是否不支持类的模拟对象。
的问候,
答案 1 :(得分:1)
您可以使用JMockit。它远远超出了EasyMock Class Extension或jMock及其ClassImposteriser的可能性。您实际上获得了AspectJ的所有功能,但使用更容易使用,特定于模拟的API。
答案 2 :(得分:0)
只要您使用的第三方课程不是最终的,并且您不需要模拟最终方法,您可以使用JMock and the ClassImposteriser来模拟它并继续照常进行。
private Mockery context = new Mockery() {{
setImposteriser(ClassImposteriser.INSTANCE);
}};
AnotherThirdPartyClass mockThirdParty = context.mock(AnotherThirdPartyClass.class);
请注意,您需要添加一些额外的依赖项(jmock-legacy-2.5.1.jar,cglib-nodep-2.1_3.jar和objenesis-1.0.jar)
答案 3 :(得分:0)
为什么不直接使用AspectJ(AOP)进行单元测试。
通过使用around方面,您可以控制传递给方法的内容并更好地监控它。
如果您需要扩展接口,可以通过方面修改类以提供更多功能,例如打开/关闭日志记录或获取性能信息。
然后,当您完成后,只需在构建中不包含方面类文件,就可以在将其投入生产之前删除这些方面。