如果你去Arquillian's home page它说:No more mocks.
,但如果我有EJB 1注入EJB 2并且我想测试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
的实际类类型,而只依赖于其(简单)名称或接口,因此您可以在创建测试时将其交换掉。