加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用Maven 2和Glassfish单元测试EJB 3

发布时间:2020-12-14 17:42:40 所属栏目:Java 来源:网络整理
导读:我一直在试图设置我的应用程序,以便我可以整个单元测试它的EJB,但似乎不能超越似乎是一个非常简单的问题. 我在NetBeans 6.9中设置了一个标准的Maven Web应用程序.我自动为其中一个EJB生成单元测试,但是每当我去运行它时,我会收到错误消息: Testcase: initia
我一直在试图设置我的应用程序,以便我可以整个单元测试它的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嵌入的所有神器?我读到的几个帖子提到,正在使用的正确的工件是javax.ejb,但是我没有找到这个了.

你可能已经猜到,我完全是单元测试的新功能,并且对于JEE6来说是相当新的.这甚至是关于单元测试EJB的正确方法吗?

解决方法

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

事实上,如果您只使用网络配置文件(这似乎是您的情况),则需要像glassfish-embedded-all或glassfish-embedded-web这样的实现(我不知道Web配置文件是通过这种方式提供EJBContainer ).

而且准确地说,这个工件不一定是“第一”依赖,而是必须在javaee-api工件之前声明.

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真的很棒,完美无缺.

也可以看看

> TOTD #128: EJBContainer.createEJBContainer: Embedded EJB using GlassFish v3
> Unit Testing EJBs and JPA with Embeddable GlassFish
> Using the EJBContainer API with or without Maven (but with GlassFish v3)
> Embedding EJB 3.1 Container Into Your Unit Tests – Boot Time: 5 Seconds
> Unit Testing EJB 3.1 …When 0.8 Seconds Are Too Long进行单元测试
> Arquillian项目

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读