我正在使用WebTestClient
对控制器进行一些集成测试。如果我在控制器内设置断点,则会达到WebTestClient
5s的标准超时时间。解决方案是按照她的Timeout on blocking read for 5000 MILLISECONDS in Spring WEBFLUX所说,将@AutoConfigureWebTestClient(timeout = "600000")
添加到我的测试中。
对我来说@AutoConfigureWebTestClient(timeout = "600000")
不会改变任何事情。 5秒后我仍然收到了timout异常。
有什么想法吗?
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@ActiveProfiles("test")
@Transactional
@Import(EntityFactoryConfiguration.class)
@AutoConfigureWebTestClient(timeout = "600000") // giv me 10 min for debugging
public class LogControllerIntegrationTest {
...
@Autowired
private WebTestClient webTestClient;
...
@Test
public void myTest() {
...
webTestClient.post().uri("/log")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.accept(MediaType.APPLICATION_JSON_UTF8)
.body(BodyInserters.fromObject(protocolLine))
.exchange()
.expectStatus().isOk();
}
答案 0 :(得分:1)
我认为注释在您的设置中不起作用,因为默认情况下超时时间为already 5 seconds,那么如何尝试该链接问题的其他答案?
@BeforeEach
public void setUp() {
webTestClient = webTestClient
.mutate()
.responseTimeout(Duration.ofMillis(600000))
.build();
}
您可以从其名称@AutoConfigureWebTestClient
中看到它正在尝试自动配置WebTestClient
,但是我认为您可以通过自动装配WebTestClient
并进行配置来覆盖它吗?因此,请继续手动设置超时!
更新
Afaics,仅添加spring-boot-starter-webflux
作为依赖项就足以获得WebTestClient
bean,因此我认为甚至不需要@AutoConfigureWebTestClient
。选中this。你可以确认吗?
答案 1 :(得分:1)
我知道问问题已经一年了。 但截至目前,此注释在给定的超时时间内效果很好 这是我的配置
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@AutoConfigureWebTestClient(timeout = "10000")
@ActiveProfiles("test")
public class SomeIntegrationTests {
@Autowired
private WebTestClient webClient;
也许是一个已解决的旧错误。
答案 2 :(得分:0)
@AutoConfigureWebTestClient
不接受毫秒值,而是使用
Duration
的字符串
Duration.parse(CharSequence)
如Javadoc中针对@AutoConfigureWebTestClient
客户端的超时时间(采用以下格式处理:
Duration.parse(CharSequence))
。
持续时间字符串的格式在Duration Javadoc
中进行了说明。要设置10分钟的超时时间,您应该指定以下内容:
@AutoConfigureWebTestClient(timeout = "PT10M")