记@AutoConfigureWebTestClient引发的一个坑-创新互联

在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引发的一个坑-创新互联
文章网址:https://www.cdcxhl.com/article44/cecpee.html

成都网站建设公司_创新互联,为您提供手机网站建设品牌网站设计网站设计响应式网站用户体验面包屑导航

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

小程序开发