我正在使用一些遗留代码,我需要测试是否调用了一些昂贵的服务(它进行网络呼叫、发送电子邮件等)。
我可以通过使用中的框架(jboss seam 2)注入一个伪服务,而不是原始服务。请参阅此问题:unittest 的Mock@org.jbos.seam.annotations.in行为
我现在希望我的假对象是一个更智能的mock,以断言它是否被调用,等等。我希望它是Mockito或Easymock或其他东西mock。但是,由于接缝2和接缝测试处理注入的方式,以测试中的经典方式构建模型然后注入是不可行的。请参阅上面的链接。
问题:有没有一种方法可以扩展或注释我的mock,以便成为Mockito或其他mock?我如何在测试中获得它的参考?
我不同意你链接到的问题的答案。单元测试应该独立于它应该工作的环境来测试类。依赖注入框架正是用来在单元测试中注入模拟依赖,而不需要任何复杂的环境来运行单元测试。
我不知道Seam,但它的文档说@In可以放在属性访问器上。我只想让这个班接受这样的测试:
public class someBean implements Serializable {
private ApplicationBean applicationBean
@In
protected void setApplicationBean(ApplicationBean applicationBean) {
this.applicationBean = applicationBean;
}
...
}
我只需要调用setter在单元测试中注入mock。
您也可以让代码保持原样,但提供一个setter或一个额外的构造函数,以便能够注入一个mock applicationBean。
您需要一个名称相同但优先级更高的类。我已经做了很多模拟。
您将相同的@name赋予mock类,并定义@install(优先级=mock)。一旦这个类在类路径中,它就会被使用,而不是你的普通类(如果我没记错的话,默认优先级是应用程序)。我现在还没有准备好代码,但我以facesmessage为例进行了模拟,这样在测试过程中我就可以从这个类中读取这些消息并对它们进行验证。