0

我们正在为Java EE应用程序编写集成测试,但不能在一件事上达成一致。

集成测试应该在嵌入式服务器上运行还是在真实服务器上运行?

在成熟的 Java EE 服务器上运行测试真的有什么好处吗?

我实际上在这种方法中看到了很多问题,最大的问题是我们应该以某种EJB方式通过@Remoteinterface 或 some公开业务方法Web Service

此外,我们计划在Jenkins服务器上运行这些集成测试。我们已经有了一个构建配置,可以打包我们的应用程序并将其部署到Glassfish服务器上。那么,也许考虑到这一点,应该会影响我们的决定,是使用嵌入式服务器还是真正的服务器?

4

2 回答 2

2

是否嵌入了服务器并不重要。但它需要有非常快的启动和低内存消耗。这样您就可以在开发人员机器上本地运行它们。好处:

  • 测试将更频繁地运行,错误将更快地被发现
  • 当您可以在本地快速运行测试时,更容易编写和调试测试
  • 它允许(更容易)TDD
  • 如果没有在开发人员机器上运行的集成测试,某些功能根本无法构建,例如 REST API。

而且您不需要将 EJB 与@Remote或作为 Web 服务公开以在嵌入式服务器中运行。事实上,您根本不需要修改它们。如果您决定是否使用 Java EE 集成框架,我不知道,但您可以看看Arquilian

我还可以建议将OpenEJB作为本地集成测试的快速 EJB 容器。

在真实的(生产)服务器测试上运行 Jenkins 上的集成测试,以测试提交的代码。作为一个额外的安全网非常有用。但是开发人员应该有自己的方法在开发时和提交之前测试他们的代码。

于 2012-08-22T09:01:10.000 回答
2

要针对 EJB 的视图执行测试@Local,您可以将容器嵌入到测试 vm 中,或者将测试嵌入到容器中。

你可以吃蛋糕也可以吃……两者都做:) Arquillian API 非常好,你可以有一个可以配置为两者都做的测试。

在使用OpenEJB之类的嵌入式容器进行开发时快速运行测试,然后在 Jenkins 中针对看起来像生产服务器的东西再次运行它们(这会更慢)。

不要限制自己认为你只需要选择一个或另一个。

于 2012-08-24T17:25:02.163 回答