如果通过单元测试,你的意思是...单元测试(单独测试一个单元),那么你实际上不需要任何特定的框架,因为EJB3.0只不过是带注释的POJO,因此可以在没有任何特殊夹具的情况下相对容易地进行测试。
现在,如果你指的是别的东西 - 比如集成测试或功能测试 - 那么,是的,工具可以帮助和简化事情(但你应该真正开始使用正确的术语:)我假设这就是你的想法。
首先,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 的容器运行端到端测试,这可能很有用。
所以,为了回答你的最后一个问题,我确实会使用可用的工具,也许是它们的组合,用于不是单元测试的测试,并且不会自己模拟/注入东西,除非它们不能满足我现在无法想到的一些需求。