gpt4 book ai didi

java - 使用 Maven 2 和 Glassfish 3 对 EJB 进行单元测试

转载 作者:搜寻专家 更新时间:2023-10-30 21:27:10 26 4
gpt4 key购买 nike

我一直在尝试设置我的应用程序,以便我可以整天对它的 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 的意义。

那么,是否有 Nexus 能够索引的 Maven 存储库,以便为我提供 glassfish-embedded-all 工件?我读过的几篇文章提到现在要使用的正确工件是 javax.ejb,但我已经没有运气找到它了。

正如您可能已经猜到的那样,我对单元测试完全陌生,而且总体上对 JEE6 相当陌生;这甚至是对 EJB 进行单元测试的正确方法吗?

最佳答案

(...) The standard recommended solution is to add the glassfish-embedded-all artifact as the first project dependency with test scope

确实,如果您只使用 web 配置文件,则需要像 glassfish-embedded-allglassfish-embedded-web 这样的实现,这似乎是您的案例(顺便说一句,我不知道 Web 配置文件提供了 EJBContainer)。

准确地说,这个工件不一定是“第一个”依赖项,但它必须javaee-api 之前声明 Artifact 。

So, is there a Maven repository that Nexus will be able to index to give me the glassfish-embedded-all artifact?

我无法用 http://download.java.net/maven/glassfish/ 重现问题但似乎 JBoss Nexus 存储库确实有它(可能是因为他们在 Arquillian 中使用它):

<repository>
<id>jboss-public-repository-group</id>
<name>JBoss Public Maven Repository Group</name>
<url>https://repository.jboss.org/nexus/content/groups/public</url>
</repository>

is this even the correct way to go about unit testing EJBs?

单元测试通常在容器外部独立完成(使用 Mocking 框架),因此我不会称其为单元测试。但是对于集成/功能测试(容器内),EJBContainer API 真的很棒而且非常好。

另见

关于java - 使用 Maven 2 和 Glassfish 3 对 EJB 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3415783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com