为什么在Arquillian中不再有模拟游戏?

时间:2019-03-25 20:38:09

标签: java java-ee mockito ejb jboss-arquillian

如果您转到Arquillian's home page,它说:No more mocks.,但是如果我有注入EJB 2的EJB 1并且我想测试EJB 1,如果不这样做,如何模拟EJB 2?嘲笑吗? Arquillian是否用于集成而不是单元测试?为什么在Arquillian中嘲笑是一种不良习惯,还有什么选择?

1 个答案:

答案 0 :(得分:2)

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的实际类类型,而仅取决于其(简单)名称或接口,因此您可以在创建测试时将其换出。