从测试启动 spring 启动应用程序
start a spring boot application from test
我有两个 spring 启动应用程序。第一个管理 PostgreSQL 数据库中的数据。另一个通过 REST 公开此数据。
在我的第一个 spring 引导应用程序中,我编写了一个使用测试数据库的测试。现在我想为另一个应用程序 (REST) 编写一个测试,该测试需要数据库中的数据。
如何将测试中的第一个 spring 启动应用程序用于第二个 spring 启动应用程序?
或者如果测试来自第一个 spring 启动应用程序,我可以设置测试只能是 运行 吗?
首先:您不应在测试中启动第一个或第二个应用程序。它会大大减慢您的测试速度。更重要的是,您将依赖于另一个实际上可能由另一个团队开发的应用程序 - 坏主意。
事实上,您有 3 种方法可以做到这一点:
使用 Wiremock 或其他一些虚拟存根服务 - 如果您准备好不调用 "real" 应用程序,这种方法将适合您。该服务应该模仿您的应用程序(应该公开相同的接口,即 url、HTTP 方法、相同的响应)
在 Docker 容器中使用应用程序并使用 Docker Compose 启动它 - 您可以在此处使用部署在某处的真实数据库或具有预定义数据的另一个容器
将第一个服务与数据库一起部署到某处,运行 集成测试或系统或端到端测试
希望对您有所帮助!
更新:我的意思是你不应该在测试中启动应用程序。此外,在我看来,很明显我们正在谈论集成测试,至少就像那个人提到从 REST 应用程序开始对整个请求行程进行测试一样。也许这向反对者澄清了事情
有不同类型的测试。第一个是单元测试——这可以确认您的业务逻辑是否有效。第二种形式是集成测试,它又分为两部分——首先你单独测试组件以确认它按照你期望的方式进行通信(有时称为组件测试),第二个你测试组件与其他组件,真实的,组件。
您可以在 maven/spring-boot 中轻松地进行单元测试,并且进行组件测试也相当容易。然而,集成测试通常要复杂得多,并且通常需要涉及简单 maven 构建系统之外的机制。最常见的方法是使用 CI/CD 工具,例如 Jenkins 或 CircleCI。
通常的模式是 运行 首先进行单元测试,因为它们最快,然后是组件测试,最后是集成测试。后者通常需要创建一个 'environment',其中包含构成服务的所有协作组件(在您的案例中是两个 spring-boot 应用程序)。
对于集成测试,我们经常发现最大的问题是"Configuration Management",它基本上是对哪些组件的哪些版本协同工作的描述。对于您的问题,您需要一个数据库、数据和两个 spring-boot 应用程序,以及它们的配置和环境数据。
我有两个 spring 启动应用程序。第一个管理 PostgreSQL 数据库中的数据。另一个通过 REST 公开此数据。
在我的第一个 spring 引导应用程序中,我编写了一个使用测试数据库的测试。现在我想为另一个应用程序 (REST) 编写一个测试,该测试需要数据库中的数据。
如何将测试中的第一个 spring 启动应用程序用于第二个 spring 启动应用程序?
或者如果测试来自第一个 spring 启动应用程序,我可以设置测试只能是 运行 吗?
首先:您不应在测试中启动第一个或第二个应用程序。它会大大减慢您的测试速度。更重要的是,您将依赖于另一个实际上可能由另一个团队开发的应用程序 - 坏主意。
事实上,您有 3 种方法可以做到这一点:
使用 Wiremock 或其他一些虚拟存根服务 - 如果您准备好不调用 "real" 应用程序,这种方法将适合您。该服务应该模仿您的应用程序(应该公开相同的接口,即 url、HTTP 方法、相同的响应)
在 Docker 容器中使用应用程序并使用 Docker Compose 启动它 - 您可以在此处使用部署在某处的真实数据库或具有预定义数据的另一个容器
将第一个服务与数据库一起部署到某处,运行 集成测试或系统或端到端测试
希望对您有所帮助!
更新:我的意思是你不应该在测试中启动应用程序。此外,在我看来,很明显我们正在谈论集成测试,至少就像那个人提到从 REST 应用程序开始对整个请求行程进行测试一样。也许这向反对者澄清了事情
有不同类型的测试。第一个是单元测试——这可以确认您的业务逻辑是否有效。第二种形式是集成测试,它又分为两部分——首先你单独测试组件以确认它按照你期望的方式进行通信(有时称为组件测试),第二个你测试组件与其他组件,真实的,组件。
您可以在 maven/spring-boot 中轻松地进行单元测试,并且进行组件测试也相当容易。然而,集成测试通常要复杂得多,并且通常需要涉及简单 maven 构建系统之外的机制。最常见的方法是使用 CI/CD 工具,例如 Jenkins 或 CircleCI。
通常的模式是 运行 首先进行单元测试,因为它们最快,然后是组件测试,最后是集成测试。后者通常需要创建一个 'environment',其中包含构成服务的所有协作组件(在您的案例中是两个 spring-boot 应用程序)。
对于集成测试,我们经常发现最大的问题是"Configuration Management",它基本上是对哪些组件的哪些版本协同工作的描述。对于您的问题,您需要一个数据库、数据和两个 spring-boot 应用程序,以及它们的配置和环境数据。