記@AutoConfigureWebTestClient引發(fā)的一個(gè)坑-創(chuàng)新互聯(lián)

在spring boot項(xiàng)目調(diào)試單測(cè)時(shí),默認(rèn)webTestClient的請(qǐng)求超時(shí)時(shí)間為5秒,稍微在斷點(diǎn)出停留,便會(huì)觸發(fā)請(qǐng)求超時(shí)的異常

成都創(chuàng)新互聯(lián)公司長(zhǎng)期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為阜陽企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷網(wǎng)站建設(shè),阜陽網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
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)

因此會(huì)在類上添加修改超時(shí)時(shí)間
@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 {...
}

然而,項(xiàng)目的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)
            ;
}

此時(shí)mock的數(shù)據(jù)便會(huì)無法正常解析,因?yàn)锧AutoConfigureWebTestClient注解引入后,導(dǎo)致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())));
                    }
                });
    }

測(cè)試用例如

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();
        });

具體原理還未知,有知道的大佬麻煩評(píng)論告知,thanks~~

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

新聞名稱:記@AutoConfigureWebTestClient引發(fā)的一個(gè)坑-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://bm7419.com/article44/cecpee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)、響應(yīng)式網(wǎng)站用戶體驗(yàn)、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)