使用Spring WebFlux开发后端接口时可以用@WebFluxTest做单元测试,需要用到WebTestClient作为test客户端,使用WebTestClient.get或WebTestClient.post发送请求,遇到了报错:
java.lang.IllegalStateException: Timeout on blocking read for 5000 MILLISECONDS
java.lang.IllegalStateException: Timeout on blocking read for 5000 MILLISECONDS
at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:123)
at reactor.core.publisher.Mono.block(Mono.java:1688)
at org.springframework.test.web.reactive.server.DefaultWebTestClient$DefaultRequestBodyUriSpec.exchange(DefaultWebTestClient.java:307)
at com.alibaba.nhcil.apigateway.controller.HttpInvokerControllerTest.invokeAbilityByKeyFailureDueToInvalidURL(HttpInvokerControllerTest.java:117)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:675)
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
at ........
解决方法:
WebTestClient默认超时为5秒,可以使用@AutoConfigureWebTestClient调整超时时间,如
@WebFluxTest(value = {HttpInvokerController.class})
@AutoConfigureWebTestClient(timeout = "10000")
class ControllerTest {
@Autowired
private WebTestClient webClient;
本文介绍在使用Spring WebFlux的WebTestClient进行单元测试时遇到的超时错误及解决方案。通过调整@AutoConfigureWebTestClient注解中的timeout属性,可有效解决WebTestClient默认5秒超时的问题。
738

被折叠的 条评论
为什么被折叠?



