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

时间:2011-10-09 07:01:12

标签: tdd ejb ejb-3.1 openejb

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

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

请赐教:)

2 个答案:

答案 0 :(得分:11)

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

  1. 单元测试。这些都非常快(在几秒钟内执行整个测试套件)。他们测试代码的非常小的块 - 即一种方法。要实现这种粒度,您需要使用Mockito模拟整个环境。你对以下内容不感兴趣:
    • 调用EntityManager并将实体放入数据库
    • 测试交易,
    • 进行异步调用,
    • 点击JMS Endpoint等
  2. 您模拟了整个环境,只是单独测试每个方法。 单元测试细粒度且速度极快。这是因为每次在代码中进行一些重要更改时都可以执行它们。如果它们更加复杂和耗时,开发人员就不会经常按照“测试”按钮进行操作。

    1. 集成测试。这些速度较慢,因为您要测试模块之间的集成。你想测试他们是否恰当地“互相交谈”,即:
      • 是按照您期望的方式传播的交易,
      • 如果您调用业务方法而没有任何交易,会发生什么,
      • 从您的WebServices客户端发送的更改是否真的命中了您的端点方法并将数据添加到数据库中?
      • 如果我的JMS端点抛出ApplicationException - 它会正确回滚所有更改吗?
    2. 如您所见,集成测试是粗粒度,并且当它们在容器中执行时(或基本上:在类似生产的环境中),它们要慢得多。在每次代码更改后,开发人员通常不会执行这些测试。

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

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

      希望它有所帮助。

答案 1 :(得分:0)

今年我参加了Devoxx并有机会回答JBOSS这个问题。 一些测试场景(我设法写下来的东西):

  • 容器的配置
  • 容器集成
  • 交易边界
  • 实体回调方法
  • 集成测试
  • Selenium录音