Java集成测试。何时使用嵌入式服务器?

时间:2012-08-22 06:46:25

标签: java-ee continuous-integration integration-testing

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

并且您不需要使用@Remote或作为Web服务公开EJB以在嵌入式服务器中运行。实际上你根本不需要修改它们。如果您决定使用Java EE集成框架,我不会这样做,但您可以查看Arquilian

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

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

答案 1 :(得分:2)

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

你可以吃蛋糕,也可以吃它......同时做到这两点:) Arquillian API足够好,你可以配置一个可以配置的测试。

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

不要限制自己认为只需要选择其中一种。