【问题标题】:How do you unit test Java EE code?如何对 Java EE 代码进行单元测试?
【发布时间】:2010-12-29 04:53:42
【问题描述】:

我想问一下您测试 Java EE 代码的首选方式?

我只发现了三个项目,它们试图帮助在 Java EE 环境中编写单元测试代码:

所以我想知道,

  • 是否有任何框架可以帮助编写 Java EE 代码的 (j) 单元测试?
  • 您是否使用嵌入式 Java EE 服务器,例如 jboss 或 glassfish v3?
  • 你自己做模型和注入吗?

非常感谢...

【问题讨论】:

标签: java unit-testing junit ejb-3.0 java-ee-5


【解决方案1】:

如果 单元测试 你的意思是......单元测试(单独测试一个单元),那么你实际上不需要任何特定的框架,因为 EJB3.0 只不过是带注释的 POJO 和因此可以相对容易地进行测试,无需任何特殊夹具。

现在,如果您指的是其他东西 - 例如 集成测试功能测试 - 那么,是的,工具可以帮助和简化事情(但你真的应该开始使用正确的术语 :) 我假设这就是你的想法。

首先,JUnitEE 似乎已过时,我什至不确定它是否适用于 EJB3.x。其次,CactusJava EE 5 support 没有给我留下深刻印象,而且不得不部署 Cactus 测试很痛苦(我认为 Cactus 对 J2EE 1.4 来说很好,但现在有点过时了)。所以这给我们留下了Ejb3Unit,在我看来这是最好的选择,特别是如果你想运行 out of container 测试,即不真正部署应用程序(更快)。

如果你想运行 in container 测试,那么你确实可以使用嵌入式容器,我目前的偏好是 GlassFish v3,即使是 Java EE 5(我可能错了,但我是对最新 JBoss 版本的开始时间感到非常失望,所以它并没有引起我的太多关注)。请参阅帖子 GlassFish Embedded Reloaded, an appserver in your pocket 获取示例代码(您可以从测试中使用)或 Using maven plugin for v3 embedded glassfish(如果您使用的是 maven)。

另一种选择是使用Cargo 打包和部署您的应用程序,然后针对已部署的应用程序运行一些测试(例如使用 Selenium 或 BDD 工具)。如果您想使用不提供任何嵌入式 API 的容器运行端到端测试,这可能会很有用。

所以,为了回答你的最后一个问题,我确实会使用可用的工具,也许是它们的组合,用于不是单元测试并且不会自己模拟/注入东西的测试,除非它们不能满足某些需求我现在想不出来。

【讨论】:

  • 我听说 Cactus 项目与新的首席开发人员 Petar Tahchiev 一起恢复了生机。 JSFUnit 基于 Cactus。
  • @cetnar 哦,很高兴知道!实际上,我可能有点过于专注于 EJB3 而完全忘记了 JSF。非常感谢您提供这些信息。
  • 非常感谢。我想,我将为我所有的 EJB pojo 创建 cunstructors 以允许注入而无需任何反射。 Cargo isintresting 进行集成测试。谢谢!
  • JMS、TimerService 和 SessionContext 有什么简单的 Mocking/Simulating 吗?
  • “因此可以相对容易地进行测试,无需任何特殊夹具”:但不是具有 @PersistenceContext EntityManager 的 EJB?
【解决方案2】:

由于您对单元测试感兴趣,我推荐 JUnit。您可以对核心类中的方法进行单元测试。如果您在使用 JUnit 编写单元测试用例时遇到困难,那么可能设计不是模块化的,并且是高度耦合的。首先关注您的核心功能并使用 JUnit 对其进行测试。

【讨论】:

    【解决方案3】:

    我一直面临着在 Java EE 6 容器(准确地说是 Glassfish v3)中运行基于 JUnit 的集成测试的同样问题,经过大量浏览和搜索,我找不到真正的解决方案适合我的需要,所以我自己写了,现在在 Google Code 上发布为 jeeunit

    我不会称它为测试框架,它实际上只是提供 JUnit 和 Embedded Glassfish 之间粘合剂的少数类。

    总体思路类似于 Cactus,您的测试在容器中运行并由外部的 servlet 触发。

    jeeunit 支持 JUnit 4、Glassfish v3、CDI 并像 Ant 或 Maven Surefire 一样生成标准的 XML JUnit 报告(事实上,我重用了 Ant 的一些代码来生成报告)。

    【讨论】:

      【解决方案4】:

      我需要测试一个 CDI 应用程序并编写了一个自定义的 JUnit 运行程序,该运行程序运行 Web 容器之外的所有内容。

      http://jglue.org/cdi-unit/

      它适用于 Java SE,还支持用于测试 Web 应用的虚拟 Request、Session 和 Conversation 范围。

      它又小又快,当您有大量单元测试时,这非常棒。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-20
        • 2016-05-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多