如何在单个 JUnit 测试中运行两个 Spring Boot 微服务?
Posted
技术标签:
【中文标题】如何在单个 JUnit 测试中运行两个 Spring Boot 微服务?【英文标题】:How to run two Spring Boot microservices in a single JUnit test? 【发布时间】:2018-06-01 01:32:29 【问题描述】:我有两个 Spring Boot REST 微服务,我们称它们为 A 和 B。我们还假设 A 对 B 进行 REST 调用。
我想在单个 JUnit 测试中在 A 和 B 之间使用 test the integration。也就是说,我想编写一个测试,以确保从 A 到 B 的通信和配置是有序的。
我知道我可以在我的测试中使用 @SpringBootTest
注释在 Spring 的“内置”测试 Web 服务器中运行单个微服务。
是否可以在一个测试中以类似的方式同时运行 A 和 B?
【问题讨论】:
在我看来,JUnit 的重点是单元测试而不是集成测试。 谢谢@snap。我同意 JUnit 专注于单元测试,但这并不妨碍它成为各种其他测试的有用驱动程序,例如:使用 Selenium 进行端到端测试。我的问题的重点是如何在一个测试中运行 2 个 Spring 的测试 Web 服务器实例。 【参考方案1】:我想我已经设法通过从我的 JUnit 测试中删除 @SpringBootTest
并使用 SpringApplicationBuilder
分别实例化两个微服务来实现。
A 是 Demo1Application
,B 是 Demo2Application
:
@Test
public void test1()
HashMap<String, Object> props1 = new HashMap<>();
props1.put("server.port", 8092);
SpringApplicationBuilder builder1 = new SpringApplicationBuilder(Demo1Application.class);
builder1
.properties(props1)
.run(new String[]"");
HashMap<String, Object> props2 = new HashMap<>();
props2.put("server.port", 8093);
SpringApplicationBuilder builder2 = new SpringApplicationBuilder(Demo2Application.class);
builder2
.properties(props2)
.run(new String[]"");
【讨论】:
以上是关于如何在单个 JUnit 测试中运行两个 Spring Boot 微服务?的主要内容,如果未能解决你的问题,请参考以下文章
如何将循环运行的测试用例添加到通过 SOAPUI 生成的 Junit 报告中
Spring Boot / JUnit,为多个配置文件运行所有单元测试
如何在多模块项目中使用 JUnit5 和 SpringBoot2 通过 gradle 而不是 intelliJ 运行测试