在spring boot項目調試單測時,默認webTestClient的請求超時時間為5秒,稍微在斷點出停留,便會觸發請求超時的異常
成都創新互聯公司長期為成百上千家客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為阜陽企業提供專業的成都網站設計、網站制作、外貿營銷網站建設,阜陽網站改版等技術服務。擁有10年豐富建站經驗和眾多成功案例,為您定制開發。Timeout on blocking read for 5000000000 NANOSECONDS
java.lang.IllegalStateException: Timeout on blocking read for 5000000000 NANOSECONDS
at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:123)
at reactor.core.publisher.Mono.block(Mono.java:1731)
因此會在類上添加修改超時時間
@AutoConfigureWebTestClient(timeout = “PT10M”)
@ContextConfiguration
@ComponentScan("com.crypto.reward.ops")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ExtendWith(TestDataSetup.class)
@AutoConfigureWebTestClient(timeout = "PT10M")
public abstract class ApplicationTest {...
}
然而,項目的jackson配置的是snake格式,
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {return builder ->builder.modules(modules())
.failOnUnknownProperties(false)
.propertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE)
.serializationInclusion(JsonInclude.Include.NON_ABSENT)
.featuresToEnable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE)
;
}
此時mock的數據便會無法正常解析,因為@AutoConfigureWebTestClient注解引入后,導致response.bodyToMono按照camel格式解析,造成無法正常反序列化
publicMono>getResultMono(ParameterizedTypeReference>resultType, String uri) {return webClient.get()
.uri(uri)
.exchangeToMono(response ->{if (response.statusCode().equals(HttpStatus.OK)) {return response.bodyToMono(resultType);
} else {return response.createException()
.flatMap(e ->Mono.just(Result.ofFail(e.getStatusText(), e.getMessage())));
}
});
}
測試用例如
PageRespDtorespDto = new PageRespDto<>();
Result>resp = Result.ofSuccess(respDto);
mockWebServer.enqueue(new MockResponse()
.setResponseCode(200)
.setBody(objectMapper.writeValueAsString(resp))
.addHeader("Content-Type", "Application/json"));
webTestClient.method(httpMethod).uri(uri)
.cookie(cookieName, sessionId)
.exchange()
.expectStatus()
.value(status ->{assertThat(status).isEqualTo(HttpStatus.OK.value());
})
.expectBody(type)
.value(result ->{assertThat(result.isOk()).isTrue();
});
具體原理還未知,有知道的大佬麻煩評論告知,thanks~~
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
新聞名稱:記@AutoConfigureWebTestClient引發的一個坑-創新互聯
文章網址:http://vcdvsql.cn/article44/cecpee.html
成都網站建設公司_創新互聯,為您提供手機網站建設、品牌網站設計、網站設計、響應式網站、用戶體驗、面包屑導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯