如何对Java EE代码进行unit testing?

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

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

  • http://jakarta.apache.org/cactus/ :最后发布:2009-01-18
  • http://www.junitee.org/ :最新发布:2004-12-11
  • http://ejb3unit.sourceforge.net/ :最新发布:2008-05-17

所以我想,

  • 是否有任何框架有助于编写(j)Java EE代码的unit testing?
  • 你使用嵌入式Java EE服务器,如jboss或glassfish v3?
  • 你自己模拟和注射吗?

非常感谢…

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

现在,如果你的意思是其他东西 – 比如集成测试function测试 – 那么, 是的 ,工具可以帮助和简化事情(但你应该真正开始使用正确的术语:)我会假设这是你的想法。

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

如果你想在容器测试中运行,那么你确实可以使用嵌入式容器,我当前的首选项是GlassFish v3,即使对于Java EE 5(我可能错了,但我对最新JBoss的开始时间感到非常失望)释放所以它没有引起我的注意)。 请参阅后面的GlassFish Embedded Reloaded文件,您可以在口袋中找到示例代码(可以在测试中使用 )或使用maven插件获取v3嵌入式glassfish (如果您使用的是maven)。

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

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

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

我一直面临着在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的一些代码来生成报告)。

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

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

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

它小巧而快速,当您进行大量unit testing时非常棒。