在使用 Springboot 运行集成测试时启动嵌入式 gRPC 服务器
Posted
技术标签:
【中文标题】在使用 Springboot 运行集成测试时启动嵌入式 gRPC 服务器【英文标题】:Start an embedded gRPC server while running integration tests with Springboot 【发布时间】:2020-06-09 21:15:54 【问题描述】:我已经构建了一个 Springboot 应用程序,它有一个 gRPC 服务器作为其依赖项之一。在运行集成测试时,我可以通过 TestContainers 使用嵌入式 Kafka、嵌入式 mysql 等,但是如何在运行集成测试套件时创建嵌入式 gRPC 服务器?
我有 .proto 合同定义文件。我会使用 Wiremock 模拟对 gRPC 服务器的请求和响应,但我还无法启动嵌入式 gRPC 服务器。
如果我能在这里找到一些帮助,那就太好了。
想一想,我的问题可以概括为在 Springboot 集成测试中使用 TestContainers 或其他方式启动通用嵌入式 HTTP 服务器。
【问题讨论】:
这对***.com/questions/31938242/… 有用吗? 那里共享的两个 repos 值得研究。但是,在我看来,他们并不是在谈论在集成测试环境中使用 gRPC 服务器。我自己想出了如何设置一个模拟 gRPC 服务器来进行集成测试,我将提供它作为这个问题的答案。 【参考方案1】:我在 IT 测试 Java gRPC 服务集成时遇到了类似的问题,因为当您需要为不同的测试返回不同的响应时,使用 InProcessServer
非常麻烦且很难使用。此外,在使用它时,您无法真正测试您的 Stub
bean 及其配置,因为您无法将 InProcessServer
主机作为变量传递。
为此,我创建了一个 gRPC Java 模拟工具 gRPC Mock。它有两个集成模块——一个用于 spring-boot,一个用于 JUnit5。它遵循与 HTTP 模拟服务 WireMock 类似的 DSL 类型的结构来创建存根。您可以访问 GitHub 页面获取一些示例。
【讨论】:
以上是关于在使用 Springboot 运行集成测试时启动嵌入式 gRPC 服务器的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot JPA 元模型不能为空!尝试运行 JUnit / 集成测试时
如何在 AWS 上运行的 Spring Boot 应用程序上本地运行集成测试?
需要设置一个配置文件,让 Flyway 在重新启动时清理数据库
启动时如何配置 Spring Boot 应用程序以在特定数据库上运行