首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在测试开发中,为什么是OpenEJB,为什么是Arquillian?

在测试开发中,为什么是OpenEJB,为什么是Arquillian?
EN

Stack Overflow用户
提问于 2011-10-09 15:01:12
回答 2查看 2.4K关注 0票数 7

我是一名web开发人员,从事过一些Java EE开发(Richfaces、Seam2、EJB3.1、JPA)。为了测试JPA,我使用了hypersonic和Mockito。但我缺乏更深层次的EJB知识。

有些人可能会争辩说,我们应该使用OpenEJB和Arquillian,但是为了什么呢?我什么时候需要做容器相关的测试?我需要OpenEJB和Arquillian的可能的测试场景是什么?

请多多指教:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-09 16:17:56

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

  1. Unit测试。这些都是非常快的(在几秒钟内执行整个测试套件)。他们测试你的一小段代码--也就是一个方法。为了达到这种粒度,你需要使用Mockito来模拟整个环境。您对以下内容不感兴趣:
    • 调用EntityManager并将实体放入数据库,
    • 测试事务,
    • 进行异步调用,
    • 命中JMS,等等。

您可以模拟整个环境,然后分别测试每种方法。单元测试是细粒度的,而且速度非常快。这是因为您可以在每次对代码进行一些重要更改时执行它们。如果它们更复杂、更耗时,开发人员就不会像他应该的那样频繁地点击“测试”按钮。

  1. Integration测试。这些比较慢,因为您想要测试模块之间的集成。您想要测试它们之间是否进行了适当的“对话”,例如:
    • 是以您期望的方式传播的事务,
    • 如果您在没有任何事务的情况下调用您的业务方法,会发生什么?
    • 执行从您的WebServices客户端发送的更改,真正命中您的端点方法,并将数据添加到database?
    • what如果我的WebServices端点抛出ApplicationException,它是否会正确地回滚所有JMS

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

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

Arquillian使您能够在您选择的容器上创建生产环境,并在此环境中执行测试(使用数据源、JMS目的地和您期望在生产环境中看到的大量其他配置)。

希望能有所帮助。

票数 12
EN

Stack Overflow用户

发布于 2011-11-29 00:48:29

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

container

  • Container integration

  • Transaction boundaries

  • Entity callback methods

  • Integration tests

  • Selenium recordings

的录音配置

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7701935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档