java - 从测试启动一个弹簧启动应用程序
问题描述
我有两个弹簧启动应用程序。第一个管理 PostgreSQL 数据库中的数据。另一个通过 REST 公开这些数据。
在我的第一个 Spring Boot 应用程序中,我编写了一个使用测试数据库的测试。现在我想为另一个应用程序(REST)编写一个测试,该测试需要数据库中的数据。
如何在我的测试中将第一个 Spring Boot 应用程序用于第二个 Spring Boot 应用程序?
或者我可以设置只有在第一个 Spring Boot 应用程序的测试中才能运行测试?
解决方案
有不同类型的测试。第一个是单元测试——这可以确认您的业务逻辑有效。第二种形式是集成测试,它又被分成两部分——第一部分你单独测试组件以确认它以你期望的方式进行通信(有时称为组件测试),第二部分你测试组件与其他部分,真实的,组件。
您可以轻松地在 maven/spring-boot 中进行单元测试,并且进行组件测试也相当容易。然而,集成测试通常要复杂得多,并且通常需要涉及简单的 Maven 构建系统之外的机制。最常见的方法是使用 CI/CD 工具,例如 Jenkins 或 CircleCI。
通常的模式是首先运行单元测试,因为它们是最快的,然后是组件测试,然后是集成测试。后者通常需要创建一个“环境”,其中包含构成服务的所有协作组件(在您的情况下是两个 spring-boot 应用程序)。
对于集成测试,我们经常会发现最大的问题是“配置管理”,它基本上是描述哪些版本的哪些组件协同工作。对于您的问题,您需要一个数据库、数据和两个 spring-boot 应用程序,以及它们的配置和环境数据。
推荐阅读
- regex - 正则表达式 PCRE 模式选择以 /first-url-segment/ 开头的所有路由,并且在 URL 的后半部分不包含“iframe”
- symfony - 为什么教义将我的整数设置为 2147483647 而不是给我一个错误
- base64 - Firehose 在 S3 base64 编码中保存记录
- api - 使用 Firestore 获取调查数据 - 每个人都可以写,少数人可以阅读
- azure - 使用 Azure AD 应用程序代理的远程桌面
- sql-server - 什么可能导致 ASYNC_NETWORK_IO 等待时间突然增加?
- linq - Linq:查找范围内的值
- javascript - 打字稿在HTTP POST之前在对象内设置集合字段
- angular - 与 @angular-devkit/builder-angular 包内的 css-what 版本相关的 Angular 12 升级问题
- node.js - 在 Google Cloud 上使用 FFMPEG 运行后台进程运行在中间停止