我有一个Feign客户端的测试,我想设置一个测试切片,如@WebMvcTest
,@DataJpaTest
等。
例如,以下测试使用@SpringBootTest
,并加载所有应用程序上下文:
@SpringBootTest
@AutoConfigureWireMock(port = 0)
class AgePredictorFeignClientTest {
@Autowired
private AgePredictorFeignClient agePredictorFeignClient;
@Test
void getAge() {
stubFor(get(urlEqualTo("/age-api?name=Henrique"))
.willReturn(aResponse().withBodyFile("25_years_old.json")
.withHeader("Content-Type", "application/json")));
Integer age = agePredictorFeignClient.getAge("Henrique").getAge();
assertThat(age).isEqualTo(25);
verify(getRequestedFor(urlEqualTo("/age-api?name=Henrique")));
}
}
如何更改此测试以仅加载与Spring Cloud OpenFeign相关的上下文?
这个测试的应用程序的源代码可以在https://github.com/henriquels25/openfeign-tests-sample上找到。
2条答案
按热度按时间yuvru6vn1#
目前还没有现成的解决方案,有一个像@FeignTest的东西。然而,有人提出了一个解决方案,这个被发现here。这个解决方案添加了所需的功能。它也一直是proposed to spring-cloud-openfeign。
如果您不想包含上述依赖性,我创建了一个示例,通过手动导入一些AutoConfiguration类来仅加载必要的功能。
唯一的缺点是wirerock的随机端口不能及时扩展,这就是为什么它有一个固定的端口。
fgw7neuy2#
感谢Nazeem的回答,他为我提供了正确的配置来导入Feign客户端,我创建了以下测试切片,它对我来说很好。
随机端口选项:
java :
Kotlin:
使用FeignTestConfiguration:
在你的测试中,简单地使用@FeignClient([YourFeignClient::class])(Kotlin,对于Java可能是.class)
通过将端口设置为0,它将被随机设置。
要为您的url设置随机端口,您只需在配置中配置url。例如:
对于固定端口,您可以将@AutoConfigureWireMock(port = 0)替换为另一个端口,或者使用@WireMockTest(httpPort = 9099)