如何在 Spring Boot 应用程序中的 Feign 客户端上使用 WireMock?
How to use WireMock on a Feign client in a Spring Boot application?
我有一个使用 Feign 客户端的 class。以前我使用 Mockito 并为 Feign 客户端中的每个方法调用提供存储的响应。现在我想使用 WireMock,这样我就可以看到我的代码正确处理了不同类型的响应代码。我该怎么做呢?我不知道如何在测试中连接我的 Feign 客户端,并连接它以便它使用 Wiremock 而不是我在 application.yml
文件中设置的 URL。任何指针将不胜感激。
也许你想看看这个项目https://github.com/ePages-de/restdocs-wiremock
这可以帮助您在 spring mvc 测试中生成和发布 wiremock 片段(使用 spring-rest-docs)。
最后,您可以使用这些片段启动一个 wiremock 服务器来为您的测试中记录的这些请求提供服务。
如果您回避这个集成解决方案,您可以在测试期间使用 wiremock JUnit 规则启动 wiremock 服务器。
http://wiremock.org/docs/junit-rule/
这是一个示例测试,它使用动态 wiremock 端口并配置 ribbon 以使用此端口:(您使用的是 feign 和 ribbon 吗?)
@WebAppConfiguration
@RunWith(SpringRunner.class)
@SpringBootTest()
@ActiveProfiles({"test","wiremock"})
public class ServiceClientIntegrationTest {
@Autowired //this is the FeignClient service interface
public ServiceClient serviceClient;
@ClassRule
public static WireMockRule WIREMOCK = new WireMockRule(
wireMockConfig().fileSource(new ClasspathFileSource("path/to/wiremock/snipptes")).dynamicPort());
@Test
public void createSome() {
ServiceClient.Some t = serviceClient.someOperation(new Some("some"));
assertTrue(t.getId() > 0);
}
//using dynamic ports requires to configure the ribbon server list accordingly
@Profile("wiremock")
@Configuration
public static class TestConfiguration {
@Bean
public ServerList<Server> ribbonServerList() {
return new StaticServerList<>(new Server("localhost", WIREMOCK.port()));
}
}
}
我有一个使用 Feign 客户端的 class。以前我使用 Mockito 并为 Feign 客户端中的每个方法调用提供存储的响应。现在我想使用 WireMock,这样我就可以看到我的代码正确处理了不同类型的响应代码。我该怎么做呢?我不知道如何在测试中连接我的 Feign 客户端,并连接它以便它使用 Wiremock 而不是我在 application.yml
文件中设置的 URL。任何指针将不胜感激。
也许你想看看这个项目https://github.com/ePages-de/restdocs-wiremock
这可以帮助您在 spring mvc 测试中生成和发布 wiremock 片段(使用 spring-rest-docs)。
最后,您可以使用这些片段启动一个 wiremock 服务器来为您的测试中记录的这些请求提供服务。
如果您回避这个集成解决方案,您可以在测试期间使用 wiremock JUnit 规则启动 wiremock 服务器。 http://wiremock.org/docs/junit-rule/
这是一个示例测试,它使用动态 wiremock 端口并配置 ribbon 以使用此端口:(您使用的是 feign 和 ribbon 吗?)
@WebAppConfiguration
@RunWith(SpringRunner.class)
@SpringBootTest()
@ActiveProfiles({"test","wiremock"})
public class ServiceClientIntegrationTest {
@Autowired //this is the FeignClient service interface
public ServiceClient serviceClient;
@ClassRule
public static WireMockRule WIREMOCK = new WireMockRule(
wireMockConfig().fileSource(new ClasspathFileSource("path/to/wiremock/snipptes")).dynamicPort());
@Test
public void createSome() {
ServiceClient.Some t = serviceClient.someOperation(new Some("some"));
assertTrue(t.getId() > 0);
}
//using dynamic ports requires to configure the ribbon server list accordingly
@Profile("wiremock")
@Configuration
public static class TestConfiguration {
@Bean
public ServerList<Server> ribbonServerList() {
return new StaticServerList<>(new Server("localhost", WIREMOCK.port()));
}
}
}