java - 编译时模拟

标签 java mocking seam integration-testing mockito

我正在使用一些遗留代码,并且需要测试是否调用了一些昂贵的服务(它进行网络调用、发送电子邮件等)。

我能够通过正在使用的框架(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/

相关文章:

java - 在 Servlet 规范 3.0 下传递 servlet 配置参数

java - 如何检查所有 Actor 是否完成后

Java:无法从套接字获取 ObjectInputStream

java - DI 的部分模拟?

java - 对不遵循 SOLID 原则的类进行部分模拟(尤其是依赖注入(inject))

java - 从 Seam 调用 Web 服务

java - PrimeFaces 仪表板

java - Selenium captureNetworkTraffic 将值传递给字符串

javascript - 用 Jest 模拟条件 window.open 函数调用

java - JBoss6 和 Seam3 环境中的 Seam 邮件