我们正在建设我们的入耳EJB项目使用Maven。它将建立全部EJB项目,然后将它们作为EAR的依赖,因此他们被打包成最终的EAR文件。

的问题是,每个EJB项目具有检查EJB JUnit测试。目前,这种测试不是非常有用,因为它们尝试连接到应用服务器(JBoss的)和EJB接口的执行方法。

有什么办法,我可以建立的EJB,对应用服务器构建和部署的EAR,然后再从所有的EJB的所有测试?

有关现在我模拟AP在测试中由起始EJB-实现类和手动“注入”注射(someEJBImpl.em = EntityManager的....),这是很烦人的,因为我们有他们和我之间的巨大依赖性具有由自己来处理事务。

有没有对这种现实AP运行EJB测试的任何其他方式?与EJB模块子集中的每个EJB模块已经建立了之后,可以部署EAR?但如何?

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

有帮助吗?

解决方案

这不是一个简单的问题,而且也没有简单的答案。希望这些指针将有所帮助。

我觉得你最好的策略是你的测试分成了真正的单元测试 - 那些可以在没有隔离容器中运行,并移动所需要的容器进入集成测试的测试

您可以使用 Ejb3unit 最大化不需要容器来运行测试。它可以帮助模拟一些复杂的依赖关系。 Ejb3unit具有Maven插件,请参阅文档

其他嘲笑框架如JMock的也有帮助。如果您使用 ClassImposteriser 。

对于那些确实需要EJB容器的测试,可以将它们配置为的集成测试的,它可能是有意义将其移动到一个单独的项目,这取决于您的EJB项目之间的关系。

有可能在你的JUnit发动嵌入式的Jetty实例测试和编程添加servlet来了。当然码头是不是一个EJB容器,你需要像 OpenEJB的EJB容器。

要配置成OpenEJB的码头,使用配置是这样的:

<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>

您也可以使用以帮助进行功能测试(假设你走到这一步) ,这里是使用导向硒,码头和OpenEJB的这样做。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top