Java 为什么不再在阿奎利安嘲弄?

Java 为什么不再在阿奎利安嘲弄?,java,jakarta-ee,mockito,ejb,jboss-arquillian,Java,Jakarta Ee,Mockito,Ejb,Jboss Arquillian,如果你去看它,它会说:不再模拟。,但是如果我有注入EJB2的EJB1,我想测试EJB1,如果我不模拟它,我怎么模拟EJB2呢?Arquillian用于集成而不是单元测试吗?为什么在Arquillian中进行模拟是一种不好的做法,还有什么替代方法?Arquillian确实用于集成测试,而不是单元测试 正是出于这个原因,在阿奎利安进行广泛的嘲弄有点不好。首先,它在很大程度上违背了使用阿奎利安语的目的 也就是说,用阿奎利安语嘲笑你所描述的情况是相当容易的。由于Arquillian中的默认模式是使用包覆

如果你去看它,它会说:
不再模拟。
,但是如果我有注入EJB2的EJB1,我想测试EJB1,如果我不模拟它,我怎么模拟EJB2呢?Arquillian用于集成而不是单元测试吗?为什么在Arquillian中进行模拟是一种不好的做法,还有什么替代方法?

Arquillian确实用于集成测试,而不是单元测试

正是出于这个原因,在阿奎利安进行广泛的嘲弄有点不好。首先,它在很大程度上违背了使用阿奎利安语的目的

也就是说,用阿奎利安语嘲笑你所描述的情况是相当容易的。由于Arquillian中的默认模式是使用包覆面处理提供micro archives build,因此在创建归档文件时,只需使用模拟版本替换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)
        ;
    }

    // ..
}
@RunWith(Arquillian.class)
公共类MyTest{
@部署
公共静态归档部署(){
返回ShrinkWrap.create(JavaArchive.class,“test.jar”)
.addClass(com.real.EJB1.class)
.addClass(com.example.mock.EJB2.class)
;
}
// ..
}

由于
EJB1
不取决于
EJB2
的实际类类型,而只取决于它的(简单)名称或接口,因此您可以在创建测试时交换它

“Arquillian用于集成而不是单元测试吗?”是的,就像Arquillian允许我访问容器中的EJB而不重新启动它一样(特别是,我使用的是Wildfly),如果我不使用Arquillian,如何在单元测试中实现这一点?如果您希望ISTQB V模型具有不同的隔离级别。应该模拟一些SUT依赖项。例如,来自其他模块的依赖项应该在某种隔离级别上模拟,因为您只需要使用DB和您自己的模块EJB测试代码。