wob*_*ogs 11 java maven-2 unit-testing glassfish ejb-3.1
我一直在尝试设置我的应用程序,以便我可以整天测试它的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)
Run Code Online (Sandbox Code Playgroud)
我已经研究了这个,我很确定问题是我的pom当前指向一个只包含API的jar
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
不是和可用于运行测试的实现.我很确定在尝试执行@BeforeClass的方法中测试失败了
container = EJBContainer.createEJBContainer();
Run Code Online (Sandbox Code Playgroud)
标准推荐的解决方案是将glassfish-embedded-all工件添加为具有测试范围的第一个项目依赖项
<dependency>
<groupId>org.glassfish.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>3.0.1</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我可以在这里找到这个工件的Maven包:http://download.java.net/maven/glassfish/但是Nexus不能将这个目录或任何子目录识别为Maven 2存储库.我想我可以下载jar并手动将其安装到Nexus中,但这似乎打败了安装Nexus的人.
那么,是否有一个Maven存储库,Nexus能够编制索引以便为我提供glassfish-embedded-all工件?我读过的一些帖子提到现在正在使用的正确工件是javax.ejb,但我找不到更多的运气了.
你可能已经猜到我对单元测试是全新的,而且对JEE6来说还是比较新的; 这甚至是单元测试EJB的正确方法吗?
Pas*_*ent 13
(...)标准推荐的解决方案是将glassfish-embedded-all工件添加为测试范围的第一个项目依赖项
实际上,您需要一个类似的实现,glassfish-embedded-all或者glassfish-embedded-web如果您只使用Web配置文件,这似乎是您的情况(我不知道Web配置文件是EJBContainer顺便提供的).
确切地说,此工件不必是"第一"依赖项,但必须在工件之前声明javaee-api.
那么,是否有一个Maven存储库,Nexus能够编制索引以便为我提供glassfish-embedded-all工件?
我无法通过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>
Run Code Online (Sandbox Code Playgroud)
这甚至是单元测试EJB的正确方法吗?
单元测试通常在容器外部进行,并且是隔离的(使用Mocking框架),因此我不会将其称为单元测试.但对于集成/功能测试(容器内),EJBContainerAPI非常好,非常好.
| 归档时间: |
|
| 查看次数: |
7547 次 |
| 最近记录: |