如果转到Arquillian's home page,它说:No more mocks.,但是如果我有注入EJB 2的EJB 1并且想要测试EJB 1,如何在不模拟它的情况下模拟EJB 2? Arquillian是否用于集成而不是单元测试?为什么在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的实际类类型,而仅取决于其(简单)名称或接口,因此您可以在创建测试时将其换出。

关于java - 为什么在Arquillian中不再有模拟游戏?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55346056/

10-12 05:18