代码之家  ›  专栏  ›  技术社区  ›  marabol

如何对Java EE代码进行单元测试?

  •  24
  • marabol  · 技术社区  · 15 年前

    我想问一下你喜欢测试Java EE代码的方法吗?

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

    所以我想知道,

    • 有助于编写Java EE代码的单元测试的框架吗?
    • 是否使用嵌入式JavaEE服务器,如JBUS或GLASISFISH V3?
    • 你自己模拟和注射吗?

    谢谢。。。

    4 回复  |  直到 13 年前
        1
  •  24
  •   Bill the Lizard    13 年前

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

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

    第一, JUnitEE 似乎已经过时了,我甚至不确定它是否有EJB3.x的功能。其次,我对 Java EE 5 support 属于 Cactus 必须部署仙人掌测试是很痛苦的(我认为仙人掌对于J2EE1.4来说很好,但是现在有点过时了)。所以这让我们 Ejb3Unit 我认为这是最好的选择,尤其是如果你想跑步 集装箱外 测试,即不真正部署应用程序(更快)。

    如果你想跑步 集装箱内 测试,那么你确实可以使用一个嵌入式容器,我现在的首选项是GLASISFISH V3,即使是Java EE 5(我可能是错误的,但是我对最新JBox发布的启动时间感到非常失望,所以它并没有引起我的注意)。见帖子 GlassFish Embedded Reloaded, an appserver in your pocket 用于示例代码(可以从测试中使用)或 Using maven plugin for v3 embedded glassfish (如果您使用Maven)。

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

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

        2
  •  2
  •   Sundar    15 年前

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

        3
  •  2
  •   Harald Wellmann    15 年前

    在Java EE 6容器(GLasFISS V3)中,我一直面临着基于JUnit的集成测试的问题,并且经过大量的浏览和搜索,我找不到一个真正适合我需要的解决方案,所以我自己编写了,现在发布为 jeeunit 在谷歌代码上。

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

    一般的想法类似于仙人掌,您的测试在容器中运行,并由外部的servlet触发。

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

        4
  •  2
  •   Bryn    13 年前

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

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

    它适用于JavaSE,还支持用于测试Web应用程序的虚拟请求、会话和会话范围。

    它又小又快,当你进行大量的单元测试时,这非常好。