【问题标题】:Java Integration Testing. When to use Embedded Server?Java 集成测试。何时使用嵌入式服务器?
【发布时间】:2012-08-22 06:46:24
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    你可以吃蛋糕也可以吃...两者都做:) Arquillian API 非常好,你可以配置一个测试来做这两个。

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

      • 谢谢。你有一些有效的观点。但是,就像我说的,集成测试将主要作为 Jenkins 构建的一部分运行,并且无论如何应用程序都将部署在远程服务器上。这就是为什么我怀疑,如果成熟的服务器已经在运行,是否值得启动嵌入式服务器。是的,我已经在尝试 Arquillian。此外,我们的一些同事声称集成测试应该在真实环境中运行。我很困惑:)
      • 那么,考虑到您的编辑,您认为作为CI 的一部分,最好在真实 环境中运行IT
      • 是的,这样更好。 Jenkins 在后台运行,速度并不那么重要。
      • 另一个问题是我不想引入@Remote接口只是为了测试。你怎么看?
      • 您写道,在嵌入式服务器上进行测试时不需要@Remote接口,但是作为一部分在真实环境中进行测试呢?詹金斯的构建?在不改变 API 的情况下,也许有更好的选择?
      猜你喜欢
      • 1970-01-01
      • 2020-06-09
      • 2011-09-30
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 2010-10-30
      相关资源
      最近更新 更多