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

时间:2009-12-22 17:17:37

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

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

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

所以我想知道,

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

非常感谢...

4 个答案:

答案 0 :(得分:24)

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

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

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

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

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

一般的想法类似于Cactus,你的测试在容器中运行,并由来自外部的servlet触发。

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

答案 3 :(得分:2)

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

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

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

它小巧而快速,当您进行大量单元测试时效果很好。