首页 > 解决方案 > 为什么 Arquillian 不再有嘲笑?

问题描述

如果您访问Arquillian 的主页,它会显示:No more mocks.但是如果我有注入 EJB 2 的 EJB 1 并且我想测试 EJB 1,如果我不模拟它,我该如何模拟 EJB 2?Arquillian 是否用于集成而不是单元测试?为什么在 Arquillian 中模拟是一种不好的做法,还有什么替代方法?

标签: javajakarta-eemockitoejbjboss-arquillian

解决方案


Arquillian 确实用于集成测试而不是单元测试。

正是出于这个原因,在 Arquillian 中广泛模拟有点不好。它在很大程度上违背了首先使用 Arquillian 的目的。

也就是说,在 Arquillian 中嘲笑您描述的情况相当容易。由于 Arquillian 中的默认模式是为您提供使用收缩包装构建的微存档,因此您可以在创建存档时简单地将 EJB2 替换为模拟版本。

例如:

@RunWith(Arquillian.class)
public class MyTest {

    @Deployment
    public static Archive<?> deployment() {
        return ShrinkWrap.create(JavaArchive.class, "test.jar")
            .addClass(com.real.EJB1.class)
            .addClass(com.example.mock.EJB2.class)
        ;
    }

    // ..
}

由于EJB1不依赖于实际的类类型,EJB2而只依赖于它的(简单)名称或接口,因此您可以在创建测试时将其换掉。


推荐阅读