首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Maven2和Glassfish 3对EJB进行单元测试

使用Maven2和Glassfish 3对EJB进行单元测试
EN

Stack Overflow用户
提问于 2010-08-05 22:35:46
回答 1查看 7.6K关注 0票数 11

我一直在尝试设置我的应用程序,这样我就可以整天对它的EJB进行单元测试,但我似乎无法通过一个看似非常简单的问题。

我在NetBeans 6.9中设置了一个标准的Maven web应用程序。我已经为其中一个EJB自动生成了一个单元测试,但无论何时运行它,我都会收到错误消息:

代码语言:javascript
复制
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

代码语言:javascript
复制
<dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>

Not和可用于运行测试的实现。我非常确定测试在尝试执行时会在标记为@BeforeClass的方法中失败

代码语言:javascript
复制
container = EJBContainer.createEJBContainer();

推荐的标准解决方案是将glassfish-embedded all工件添加为具有测试范围的第一个项目依赖项

代码语言:javascript
复制
<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不能将这个目录或任何子目录识别为Maven2存储库。我想我可以下载jar并手动将其安装到Nexus中,但这似乎与安装Nexus的目标不符。

那么,有没有一个Maven存储库,Nexus可以对其进行索引,以提供glassfish-embedded-all工件?我读过的一些帖子提到,现在使用的正确工件是javax.ejb,但我没有更多的机会找到它。

正如您可能已经猜到的那样,我对单元测试完全是个新手,一般来说,我对JEE6也相当陌生;这是进行单元测试EJB的正确方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-05 23:33:12

(...)推荐的标准解决方案是将glassfish-embedded all工件添加为具有测试范围的第一个项目依赖项

实际上,如果你只使用web配置文件,你需要一个像glassfish-embedded-allglassfish-embedded-web这样的实现,这似乎就是你的情况(顺便说一句,我不知道web配置文件提供了EJBContainer )。

准确地说,这个工件不一定是"first“依赖项,但它必须在 javaee-api工件之前声明为

那么,有没有一个

存储库,Nexus可以索引给我glassfish-embedded-all工件?

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

代码语言:javascript
复制
<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>

这是对EJB进行单元测试的正确方式吗?

单元测试通常是在容器外进行的,并且是隔离的(使用模拟框架),所以我不会称之为单元测试。但是对于集成/功能测试(在容器中),EJBContainer应用程序接口真的很棒,而且非常好。

另请参阅

  • Arquillian项目

的单元测试示例

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3415783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档