如果转到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/