我是一名 Web 开发人员,最终从事了一些 Java EE 开发(Richfaces、Seam 2、EJB 3.1、JPA)。为了测试 JPA,我使用了 hypersonic 和 Mockito。但我缺乏更深入的 EJB 知识。
有些人可能会争辩说我们应该使用 OpenEJB 和 Arquillian,但是为了什么?我什么时候需要进行容器相关测试?我需要 OpenEJB 和 Arquillian 的可能测试场景有哪些?
请赐教:)
在这种情况下有两个方面。
您模拟整个环境并单独测试每个方法。单元测试是细粒度的并且非常快。这是因为您可以在每次对代码进行一些重要更改时执行它们。如果它们更复杂和更耗时,开发人员就不会像他应该的那样频繁地点击“测试”按钮。
如您所见,集成测试是粗粒度的,并且当它们在容器中执行时(或者基本上:在类似生产的环境中)它们要慢得多。每次代码更改后,开发人员通常不会执行这些测试。
当然,您可以在嵌入式模式下运行 EJB Container,就像在 Java SE 中执行 JPA 一样。关键是人工环境为您提供了基本服务,但您最终会对其进行调整,但最终的灵活性仍然低于真实容器中的灵活性。
Arquillian 使您能够在您选择的容器上创建生产环境并在此环境中执行测试(使用数据源、JMS 目标以及您希望在生产环境中看到的大量其他配置。)
希望能帮助到你。
我今年参加了 Devoxx,并有机会回答 JBOSS 伙计们这个问题。一些测试场景(我设法写下来的东西):