在TDD中,为什么OpenEJB和为什么Arquillian?

我是一名Web开发人员,最终参与了一些Java EE开发(Richfaces,Seam 2,EJB 3.1,JPA).为了测试JPA,我使用了高超音速和Mockito.但我缺乏更深入的EJB知识.

有些人可能会说我们应该使用OpenEJB和Arquillian,但为了什么?
我什么时候需要进行容器依赖测试?我需要OpenEJB和Arquillian的可能测试场景是什么?

请赐教:)

在这种情况下有两个方面.

>单元测试.这些都非常快(在几秒钟内执行整个测试套件).他们测试代码的非常小的块 – 即一种方法.要实现这种粒度,您需要使用Mockito模拟整个环境.你对以下内容不感兴趣:

>调用EntityManager并将实体放入数据库,
>测试交易,
>进行异步调用,
>点击JMS端点等

您模拟了整个环境,只是单独测试每个方法.单元测试是细粒度和极快的.这是因为每次在代码中进行一些重要更改时都可以执行它们.如果它们更复杂和耗时,开发人员就不会经常按照“测试”按钮点击它.

>集成测试.这些速度较慢,因为您要测试模块之间的集成.你想测试他们是否恰当地“互相交谈”,即:

>交易是按照您期望的方式传播的,
>如果你根本没有交易调用业务方法会发生什么,
>从WebServices客户端发送的更改是否真的命中了端点方法并将数据添加数据库中?
>如果我的JMS端点抛出ApplicationException,它会正确回滚所有更改吗?

如您所见,集成测试是粗粒度的,并且当它们在容器中执行时(或基本上:在类似生产的环境中),它们要慢得多.每次代码更改后,开发人员通常不会执行这些测试.

当然,您可以在嵌入模式下运行EJB容器,就像在Java SE中执行JPA一样.关键在于人工环境为您提供基本服务,但您最终会对其进行调整,并且最终会以比真实容器更少的灵活性结束.

Arquillian使您能够在您选择的容器上创建生产环境,并在此环境中执行测试(使用数据源,JMS目标以及您希望在生产环境中看到的许多其他配置.)

希望能帮助到你.

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...