gpt4 book ai didi

spring-boot - Spring Boot @RestClientTest 如何使用真实服务器进行测试(不是模拟)

转载 作者:行者123 更新时间:2023-12-05 05:08:01 25 4
gpt4 key购买 nike

我需要针对 REST API 创建集成测试。我的服务使用 Resttemplate 作为 HTTP 客户端。客户端代码是从 swagger 文件生成的。

运行测试会产生错误 java.lang.AssertionError: No further requests expected: HTTP GET

测试似乎是针对模拟服务器运行的。如何让测试在真实服务器上运行?

这是我当前的测试设置(想要切出一个最小的测试框架以获得快速测试 - 启动完整的上下文太慢了):

@RunWith(SpringRunner.class)
@Import(value = { TpzConfig.class, TpzServiceRestImpl.class, ManufacturingPlantPhPmMapperImpl.class,
ProductHierarchyMapperImpl.class, PlantMapperImpl.class })
@ActiveProfiles(profiles = { "tpz" })
@RestClientTest
public class TpzServiceRestImplTest {

@Autowired
private TpzService to;

@MockBean
private ProductionPlantService ppService;

@MockBean
private ProductHierarchyService phService;

@Test
public void test() {
List<ProductManufacturer> pmByProductHierarchy = to.pmByProductHierarchy("001100909100100388");

}

}

我需要 @RestClientTest 来拥有 RestTemplateBuilder 的 bean。

有没有办法配置 @RestClientTest 使用真实服务器(类似于 @DataJpaTest 我可以配置不使用 h2)?

最佳答案

@RestTemplateTest 为您提供预配置的 RestTemplateBuilderMockRestServiceServer

1.您可以@Autowired MockRestServiceServer 并模拟预期的 HTTP 调用。


2.删除自动配置:

@RestClientTest(excludeAutoConfiguration = MockRestServiceServerAutoConfiguration.class)

但这会使测试有点慢..也许有一种方法可以优化它。


3.另一方面,您可以删除@RestClientTest,并在测试配置文件中创建一个RestTemplateBuilder bean。像这样:

@TestConfiguration
public class TestConfig {
@Bean
public RestTemplateBuilder getRestTemplateBuilder() {
return new RestTemplateBuilder();
}
}

在此之后,将此配置文件添加到您的导入中:

@Import(value = { TpzConfig.class, TpzServiceRestImpl.class, 
ManufacturingPlantPhPmMapperImpl.class, ProductHierarchyMapperImpl.class,
PlantMapperImpl.class, TestConfig.class })

你应该能顺利通过考试。

关于spring-boot - Spring Boot @RestClientTest 如何使用真实服务器进行测试(不是模拟),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58608994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com