为什么 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 类型,而只依赖于它的(简单)名称或接口,您可以在创建测试时将其换掉.
如果你去 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 类型,而只依赖于它的(简单)名称或接口,您可以在创建测试时将其换掉.