【发布时间】:2022-01-04 20:21:45
【问题描述】:
我有一个实现 CommandLineRunner 的类,在它的 run 方法中,webClient 发出请求并对响应进行一些处理,包括我想在测试中验证的方法:
@RequiredArgsConstructor
public class WowGreatClass implements CommandLineRunner {
private final WebClient webClient;
@Override
public void run(String... args) {
webClient.get()
.uri("/foo")
.retrieve()
.bodyToMono(PairsResponseDto.class)
.flatMap(response -> Flux.fromIterable(response.getResult()))
.collectList()
.map(this::methodToTest)
//...
).block();
}
}
所以我在测试中使用了 MockWebServer,如下所示:
@ExtendWith(MockitoExtension.class)
public class WowGreatTest {
MockWebServer mockServer = new MockWebServer();
@Spy
WowGreatClass greatClass = new WowGreatClass(WebClient.create(mockServer.url("/").toString()));
@Captor
ArgumentCaptor<String> captor;
@Test
public void testTheThing() {
mockServer.enqueue(
new MockResponse()
.setResponseCode(200)
.addHeader("Content-Type", "application/json")
.setBody("something really interesting"));
greatClass.run();
verify(greatClass).methodToTest(captor.capture());
}
}
MockWebServer 在测试期间做了它应该做的事情,问题是在初始请求之后它似乎只是永远挂起等待更多。 run() 方法永远不会完成,verify() 调用永远不会到达。我在这里遗漏了一些明显的东西,还是出了什么问题?
【问题讨论】:
标签: java spring-boot junit mockito