我正在使用一些遗留代码,并且需要测试是否调用了一些昂贵的服务(它进行网络调用、发送电子邮件等)。
我能够通过正在使用的框架(jboss seam 2)注入(inject)假服务而不是原始服务。看这个问题:Mock @org.jboss.seam.annotations.in behaviour for unittest
我现在希望我的假对象成为一个更智能的模拟,以断言它是否被调用等。我希望它是一个 Mockito 或 Easymock 或其他一些模拟。但是,由于接缝 2 和接缝测试处理注入(inject)的方式,在测试中以经典方式构建模拟然后注入(inject)它是行不通的。请参阅上面的链接。
问题:有没有办法让我的模拟扩展或注释,以便成为 Mockito 或其他模拟?我如何在测试中获得对它的引用?
最佳答案
我不同意您链接的问题的答案。单元测试应该独立于它应该工作的环境来测试类。依赖注入(inject)框架正是为了能够在单元测试中注入(inject)模拟依赖项,而不需要任何复杂的环境来运行单元测试。
我不了解 Seam,但它的文档说 @In 可以放置在属性访问器上。我只会像这样测试类:
public class someBean implements Serializable {
private ApplicationBean applicationBean
@In
protected void setApplicationBean(ApplicationBean applicationBean) {
this.applicationBean = applicationBean;
}
...
}
我只需调用 setter 在单元测试中注入(inject)模拟。
您也可以按原样保留代码,但提供一个 setter 或附加构造函数以便能够注入(inject)模拟 applicationBean。
关于java - 编译时模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9181734/