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

2022-09-01 19:10:27

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

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

所以我想知道,

  • 有没有框架可以帮助为Java EE代码编写(j)单元测试?
  • 您是否使用像jboss或glassfish v3这样的嵌入式Java EE服务器?
  • 你自己模拟和注射吗?

多谢。。。


答案 1

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

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

首先,JUnitEE似乎已经死了,过时了,我甚至不确定它是否适用于EJB3.x。其次,我对CactusJava 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 的容器运行端到端测试,这可能很有用。

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


答案 2

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


推荐