我是一名 Web 开发人员,最终参与了一些 Java EE 开发(Richfaces、Seam 2、EJB 3.1、JPA)。为了测试 JPA,我使用 hypersonic 和 Mockito。但我缺乏更深入的 EJB 知识。
有些人可能会说我们应该使用 OpenEJB 和 Arquillian,但是为什么呢?
我什么时候需要进行容器相关测试?我需要 OpenEJB 和 Arquillian 的可能测试场景有哪些?
请赐教:)
这个案例有两个方面。
-
Unit tests. These are intended to be very fast (execute the whole test suite in seconds). They test very small chunks of your code - i.e. one method. To achieve this kind of granularity, you need to mock the whole environment using i.e. Mockito. You're not interested in:
- 调用 EntityManager 并将实体放入数据库中,
- 测试交易,
- 进行异步调用,
- 命中 JMS 端点等。
您模拟整个环境并单独测试每个方法。单元测试是细粒度的而且速度快得惊人。这是因为每次对代码进行一些重要更改时都可以执行它们。如果它们更加复杂和耗时,开发人员就不会像他应该的那样频繁地点击“测试”按钮。
-
Integration tests. These are slower, as you want to test the integration between your modules. You want to test if they 'talk' to each other appropriately, i.e.:
- 交易是否按照您期望的方式传播,
- 如果您在完全没有事务的情况下调用业务方法,会发生什么情况,
- 从您的 Web 服务客户端发送的更改是否真的到达您的端点方法并将数据添加到数据库中?
- 如果我的 JMS 端点抛出 ApplicationException 怎么办 - 它会正确回滚所有更改吗?
如你所见,集成测试是粗粒度的当它们在容器中(或者基本上:在类似生产的环境中)执行时,它们的速度要慢得多。开发人员通常不会在每次代码更改后执行这些测试。
当然,您可以以嵌入模式运行EJB容器,就像您可以在Java SE中执行JPA一样。关键是,人工环境为您提供了基本服务,但您最终会对其进行调整,但灵活性仍然低于真实容器。
Arquillian 使您能够在您选择的容器上创建生产环境,并在该环境中执行测试(使用数据源、JMS 目标以及您期望在生产环境中看到的许多其他配置。)
希望能帮助到你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)