为什么 Arquillian 中不再有模拟?

Why no more mocks in Arquillian?

如果你去 Arquillian's home page 它说:No more mocks.,但是如果我有注入 EJB 2 的 EJB 1 并且我想测试 EJB 1,如果我不这样做,我该如何模拟 EJB 2嘲笑它? Arquillian 是否用于集成而不是单元测试?为什么在 Arquillian 中模拟是一种不好的做法,还有什么替代方案?

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

正是出于这个原因,在 Arquillian 中进行大量模拟是一种不好的做法。它在很大程度上违背了使用 Arquillian 的初衷。

也就是说,在 Arquillian 中模拟您描述的情况相当容易。由于 Arquillian 中的默认模式是为您提供使用 shrinkwrap 构建的微存档,因此您可以在创建存档时简单地将 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 的实际 class 类型,而只依赖于它的(简单)名称或接口,您可以在创建测试时将其换掉.