从测试开始弹簧启动应用程序

时间:2018-05-16 08:36:29

标签: java spring spring-boot junit spring-test

我有两个弹簧启动应用程序。第一个管理PostgreSQL数据库中的数据。另一个通过REST公开这些数据。

在我的第一个春季启动应用程序中,我编写了一个使用测试数据库的测试。现在我想为其他应用程序(REST)编写一个测试,该测试需要数据库中的数据。

如何在我的测试中使用第一个Spring启动应用程序用于第二个Spring启动应用程序?

或者我可以设置只有在第一个春季启动应用程序的测试时才能运行测试吗?

2 个答案:

答案 0 :(得分:1)

有不同类型的测试。第一个是单元测试 - 这证实了您的业务逻辑是有效的。第二种形式是集成测试,它又分为两部分 - 第一部分是单独测试组件以确认它以您期望的方式进行通信(有时称为组件测试),第二种是针对其他部分测试组件,真实的,组件。

您可以轻松地在maven / spring-boot中进行单元测试,而且组件测试也相当容易。然而,集成测试通常要复杂得多,并且通常需要涉及简单的maven构建系统之外的机制。最常见的方法是使用CI / CD工具,如Jenkins或CircleCI。

通常的模式是首先运行单元测试,因为它们是最快的,然后是组件测试,然后是集成测试。后者通常需要创建一个“环境”,其中包含组成服务的所有协作组件(在您的情况下为两个spring-boot应用程序)。

对于集成测试,我们经常发现最大的问题是“配置管理”,它基本上描述了哪些组件的哪些版本协同工作。对于您的问题,您需要一个数据库,数据和两个spring-boot应用程序,以及它们的配置和环境数据。

答案 1 :(得分:-2)

首先:您不应该在测试中启动第一个或第二个应用程序。它会大大减慢您的测试速度。更重要的是,你将依赖另一个实际上可能由另一个团队开发的应用程序 - 糟糕的主意。

事实上,你有三种方法可以做到:

  1. 使用Wiremock或其他一些虚拟存根服务 - 如果您准备好不打电话给“真正的”应用程序,这种方法将适合您。该服务应该模仿您的应用程序(应该公开相​​同的接口,即url,HTTP方法,相同的响应)

  2. 使用Docker容器中的应用程序并使用Docker Compose启动它 - 您可以在这里使用部署在某处的真实数据库或使用预定义数据的其他容器

  3. 将第一个服务与数据库一起部署并运行集成测试或系统或端到端测试

  4. 希望这有帮助!

    更新:我的意思是您不应该在测试中启动应用 。此外,在我看来,显而易见的是,我们正在谈论集成测试,至少当人们提到从REST应用程序开始测试整个请求行程时。也许这可以向downvoters澄清事情