我一直在尝试设置我的应用程序,以便我可以整天对它的 EJB 进行单元测试,但我似乎无法解决一个看似非常简单的问题。
我在 NetBeans 6.9 中设置了一个标准的 Maven Web 应用程序。我已经为其中一个 EJB 自动生成了一个单元测试,但是每当我运行它时,我都会收到错误消息:
Testcase: initializationError(com.example.ExampleTest): Caused an ERROR
Absent Code attribute in method that is not native or abstract in class file javax/ejb/embeddable/EJBContainer
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/ejb/embeddable/EJBContainer
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
我已经研究了这个,我很确定问题是我的 pom 当前指向一个只包含 API 的 jar
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
不是和可用于运行测试的实现。我很确定测试在尝试执行时在标有@BeforeClass 的方法中失败
container = EJBContainer.createEJBContainer();
标准推荐的解决方案是将 glassfish-embedded-all 工件添加为具有测试范围的第一个项目依赖项
<dependency>
<groupId>org.glassfish.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>3.0.1</version>
<scope>test</scope>
</dependency>
我可以在这里找到这个工件的 Maven 包:http: //download.java.net/maven/glassfish/但 Nexus 无法将此目录或任何子目录识别为 Maven 2 存储库。我想我可以下载 jar 并将其手动安装到 Nexus 中,但这似乎违背了安装 Nexus 的意义。
那么,是否有一个 Maven 存储库,Nexus 将能够索引给我 glassfish-embedded-all 工件?我读过的几篇文章提到现在使用的正确工件是 javax.ejb 但我没有更多的运气找到它。
正如您可能已经猜到的那样,我对单元测试完全陌生,对 JEE6 也很陌生;这甚至是对 EJB 进行单元测试的正确方法吗?