当前位置: 首页 > 面试题库 >

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

赫连明诚
2023-03-14
问题内容

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

推荐的标准解决方案是将玻璃鱼嵌入的所有工件添加为具有测试范围的第一个项目依赖项

<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存储库,从而为我提供了嵌入了玻璃鱼的所有工件?我读过几篇文章提到,现在要使用的正确工件是javax.ejb,但是我再也找不到运气了。

您可能已经猜到我对单元测试是完全陌生的,而对于JEE6来说却是相当陌生的。这甚至是进行单元测试EJB的正确方法吗?


问题答案:

(…)推荐的标准解决方案是将包含玻璃鱼的所有工件添加为具有测试范围的第一个项目依赖项

确实,您需要一个类似的实现,glassfish-embedded-all或者glassfish-embedded- web如果您仅使用网络配置文件,这似乎是您的情况(我不知道网络配置文件是EJBContainer顺便提供的)。

确切地说,此工件不必是“第一个”依赖项,但 必须 javaee-api工件 之前 声明。

那么,是否存在Nexus可以索引的Maven存储库,从而为我提供了嵌入了玻璃鱼的所有工件?

我无法通过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>

这甚至是进行单元测试EJB的正确方法吗?

单元测试通常是在容器外部进行的,并且是隔离的(使用Mocking框架),因此我不称其为单元测试。但是对于集成/功能测试(容器内),该EJBContainerAPI确实很棒而且非常完美。

也可以看看

  • TOTD#128:EJBContainer.createEJBContainer:使用GlassFish v3的嵌入式EJB
  • 使用嵌入式GlassFish进行单元测试EJB和JPA
  • 在带有或不带有Maven的情况下使用EJBContainer API(但与GlassFish v3一起使用)
  • 将EJB 3.1容器嵌入到单元测试中-引导时间:5秒
  • EJB 3.1单元测试…对于单元测试示例而言,如果0.8秒太长
  • 该的Arquillian 项目


 类似资料:
  • 问题内容: 我对Node相对较新,并且正在使用knex和书架进行项目。我在对代码进行单元测试时遇到了一些麻烦,但是我不确定自己做错了什么。 基本上,我有一个看起来像这样的模型(称为VorcuProduct): 还有一个函数,如果数据库中不存在VorcuProduct,它将保存它。非常简单。执行此操作的函数如下所示: 哪种方法可以在不影响数据库的情况下进行测试?我是否需要模拟以返回模型或未定义模型(

  • 问题内容: 我选择的数据库是MongoDB。我正在编写一个数据层API,以从客户端应用程序中抽象实现细节- 也就是说,我实质上是在提供一个公共接口(一个充当IDL的对象)。 我正在以TDD方式测试自己的逻辑。在每个单元测试之前,调用一个方法来创建数据库单例,此后,当测试完成时,将调用一个方法来删除数据库。这有助于促进单元测试之间的独立性。 几乎所有单元测试(即 执行上下文查询 )都需要先进行某种插

  • 我想测试以下骆驼路线。我在网上找到的所有例子都有以文件开头的路由,在我的例子中,我有一个Springbean方法,每隔几分钟就会被调用一次,最后消息被转换并移动到jms以及审计目录。 我对这条路线的写测试毫无头绪。目前我在测试用例中所拥有的是

  • 我正在构建一个android应用程序,它使用Firebase作为后端,并采用模型、视图和演示者架构。然而,Firebase是一种云服务的事实使我的android应用程序中的自动测试变得复杂。到目前为止,我已经构建了大部分身份验证系统,但无法看到如何在我的应用程序中实现Firebase代码的单元测试。在端到端测试方面,我也陷入了困境。 由于测试是任何android应用程序的基础,没有it应用程序开发

  • 问题内容: 我的公司一直在评估Spring MVC,以确定我们是否应该在下一个项目中使用它。到目前为止,我喜欢我所看到的内容,现在,我正在查看Spring Security模块,以确定是否可以/应该使用它。 我们的安全要求非常基本。用户只需要能够提供用户名和密码即可访问网站的某些部分(例如获取有关其帐户的信息);并且网站上的页面很少(常见问题解答,支持等),应该为匿名用户提供访问权限。 在我创建的

  • 使用Android Studio进行单元测试 原文链接 : Unit Testing With Android Studio 原文作者 : Rex St John 译文出自 : 开发技术前线 www.devtf.cn 译者 : ZhaoKaiQiang 校对者: zhengxiaopeng 状态 : 校对完 这篇文章介绍了在Android Studio中进行单元测试的基础部分。 很多教程都指导你应