我可以找到几个关于模仿WebClient对象的问题。但是当我写一个有正文和多个头值的帖子时,我仍然有问题。我只是在使用Mockito。
public Boolean addNote(AlarmModel model) {
ServiceDTO dto = mapper(model);
return webClient.post()
.uri("/service/api/addNotes")
.headers(getHttpHeaders(dto.getHeader()))
.accept(MediaType.APPLICATION_JSON)
.body(Mono.just(dto.getBody()), ServiceBodyDTO.class)
.retrieve()
.onStatus(HttpStatus::is5xxServerError, this::handleStatusCodeError)
.onStatus(HttpStatus::is4xxClientError, this::handleStatusCodeError)
.bodyToMono(Boolean.class)
.block();
}
而这就是我是如何嘲笑post方法的行为的。
when(webClientMock.post()).thenReturn(requestBodyUriMock);
when(requestBodyUriMock.uri(anyString())).thenReturn(requestBodyMock);
when(requestHeadersMock.headers(any())).thenReturn(requestHeadersMock);
when(requestBodyMock.accept(any())).thenReturn(requestBodyMock);
when(requestBodyMock.contentType(any())).thenReturn(requestBodyMock);
when(requestBodyMock.bodyValue(any())).thenReturn(requestHeadersMock);
when(requestHeadersMock.retrieve()).thenReturn(responseMock);
when(responseMock.bodyToMono(Boolean.class))
.thenReturn(Mono.just(true));
但是,当我执行这个测试用例时,它在具有***retrieve()***的行失败,异常是java.lang.NullPointerException
我错过什么了吗?TIA。
2条答案
按热度按时间irlmq6kh1#
同意@Martin的评论,* 单元测试webclient的ROI非常低。*
我推荐WireMock,它为测试Web客户端提供了非常好的API。
通过提供不同的存根,您可以轻松地测试积极和消极的场景
使用Scenarios测试重试逻辑或甚至使用Delays模拟超时
每秒
我不确定为什么要使用
block
,但我的示例使用StepVerifier
,并假定addNote
返回Mono<Boolean>
vxqlmq5t2#
这就是对我有效的,和你的没有太大的不同。你可能想比较和反馈:)