【问题标题】:Maven EAR module and EJB dependencies testsMaven EAR 模块和 EJB 依赖项测试
【发布时间】:2009-07-27 03:55:43
【问题描述】:

我们正在使用 maven 构建我们的 EAR 和 EJB 项目。它将构建所有的 EJB 项目,然后将它们用作 EAR 的依赖项,因此最终将它们打包到 EAR 文件中。

问题在于每个 EJB 项目都有检查 EJB 的 junit 测试。目前这些测试不是很有用,因为它们试图连接到应用程序服务器(jboss)并从 EJB 接口执行方法。

有什么方法可以构建 EJB、构建和部署 EAR,然后针对应用程序服务器运行来自所有 EJB 的所有测试?

现在我正在通过启动 EJB-Implementation 类和手动“注入”注入(someEJBImpl.em = EntityManager....)在测试中模拟 AP,这非常烦人,因为我们在它们和我之间有很大的依赖关系必须自己处理交易。

还有其他方法可以针对真正的 AP 运行 EJB 测试吗?是否可以在每个 EJB 模块之后部署 EAR,其中包含已构建的 EJB 模块的子集?但是怎么做呢?

是否可以设置为运行所有 EJB 模块的 maven 测试作为 EAR 测试的一部分?如何做到这一点?

【问题讨论】:

    标签: unit-testing maven-2 junit ejb ear


    【解决方案1】:

    这不是一个简单的问题,也没有简单的答案。希望这些建议会有所帮助。

    我认为你最好的策略是将你的测试分成真正的单元测试——那些可以在没有容器的情况下独立运行的测试,并将需要容器的测试移到集成测试中。

    您可以使用Ejb3unit 来最大化不需要容器运行的测试。它有助于模拟一些复杂的依赖关系。 Ejb3unit 有一个 Maven 插件,有关连接到他们的 Maven 存储库的详细信息,请参阅documentation

    JMock 等其他模拟框架也可以提供帮助。如果你使用ClassImposteriser,你可以模拟类和接口。

    对于那些确实需要 EJB 容器的测试,您可以将它们配置为以 integration tests 运行,根据您的 EJB 项目之间的关系,将它们移动到单独的项目中可能是有意义的。

    可以启动embedded Jetty instance in your JUnit tests 并以编程方式向其中添加servlet。当然 Jetty 不是 EJB 容器,您需要像 OpenEJB 这样的 EJB 容器。

    要将 OpenEJB 配置到 Jetty 中,请使用如下配置:

    <plugin>
      <groupId>org.mortbay.jetty</groupId>
      <artifactId>maven-jetty-plugin</artifactId>
      <configuration>
        <scanIntervalSeconds>5</scanIntervalSeconds>
        <contextPath>/example</contextPath>
        <systemProperties>
          <systemProperty>
            <name>java.naming.factory.initial</name>
            <value>org.apache.openejb.client.LocalInitialContextFactory</value>
          </systemProperty>
          <systemProperty>
            <name>java.naming.factory.url.pkgs</name>
            <value>org.mortbay.naming</value>
          </systemProperty>
        </systemProperties>
      </configuration>
    </plugin>
    

    OpenEJB 的依赖声明是:

    <dependency>
      <groupId>org.apache.openejb</groupId>
      <artifactId>openejb-core</artifactId>
      <version>3.1</version>
      <scope>test</scope>
    </dependency>
    

    您还可以使用Selenium 来帮助进行功能测试(假设您已经做到了这一点),这里有一个guide using Selenium, Jetty and OpenEJB 可以这样做。

    【讨论】:

      【解决方案2】:

      对于 JBoss,您可以尝试 Maven Cargo plugin。我目前正在使用 JBoss 5.1 对其进行测试,并且仍在努力:

      Where can I find a complete Maven Cargo plugin example for EJB tests?

      【讨论】:

        猜你喜欢
        • 2017-06-06
        • 2018-04-19
        • 2010-12-16
        • 1970-01-01
        • 1970-01-01
        • 2014-10-20
        • 2020-04-13
        • 2012-01-01
        相关资源
        最近更新 更多