我在理解 Spring Boot 中的 WireMock 集成时遇到了一些麻烦。似乎可以通过使用静态
WireMock.stubFor()
或WireMockExtension的wireMockExtension.stubFor()
来设置存根。
在以下
@SpringBootTest
中只有wireMockExtension.stubFor()
似乎有效。 WireMock.stubFor()
给出 404 和一条消息,指出没有已注册的存根。
这两种变体之间有什么区别,在哪些情况下会使用其中一种?
这是一个样本测试...
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@WireMockTest
class WiremockSpringbootApplicationTests {
@Value("${remote.url}")
private String remoteUrl;
@RegisterExtension
static WireMockExtension wireMockExtension = WireMockExtension.newInstance()
.options(wireMockConfig().dynamicPort())
.build();
// set remote.url dynamically based on WireMock instance
@DynamicPropertySource
static void dynamicProperties(DynamicPropertyRegistry registry) {
registry.add("remote.url", wireMockExtension::baseUrl);
}
@Test
void should_return_test() {
final WebClient webClient = WebClient.builder().baseUrl(remoteUrl).build();
// this stubbing works...
wireMockExtension.stubFor(get("/test")
.willReturn(aResponse().withBody("test")));
// ... this doesn't and gives a 404
// WireMock.stubFor(get("/test")
// .willReturn(aResponse().withBody("test")));
final String responseString = webClient.get().uri("/test")
.retrieve()
.bodyToMono(String.class)
.block();
Assertions.assertThat(responseString).isEqualTo("test");
}
}