3
我們寫了一個小的Spring Boot REST應用程序,它在另一個REST端點上執行一個REST請求。如何在單元測試中模擬Spring WebClient
@RequestMapping("/api/v1")
@SpringBootApplication
@RestController
@Slf4j
public class Application
{
@Autowired
private WebClient webClient;
@RequestMapping(value = "/zyx", method = POST)
@ResponseBody
XyzApiResponse zyx(@RequestBody XyzApiRequest request, @RequestHeader HttpHeaders headers)
{
webClient.post()
.uri("/api/v1/someapi")
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON)
.body(BodyInserters.fromObject(request.getData()))
.exchange()
.subscribeOn(Schedulers.elastic())
.flatMap(response ->
response.bodyToMono(XyzServiceResponse.class).map(r ->
{
if (r != null)
{
r.setStatus(response.statusCode().value());
}
if (!response.statusCode().is2xxSuccessful())
{
throw new ProcessResponseException(
"Bad status response code " + response.statusCode() + "!");
}
return r;
}))
.subscribe(body ->
{
// Do various things
}, throwable ->
{
// This section handles request errors
});
return XyzApiResponse.OK;
}
}
我們是Spring的新手,並且無法爲這個小代碼片段編寫單元測試。
有沒有一種優雅(反應性)的方式來模擬webClient本身或啓動一個模擬服務器,webClient可以用作端點?
man,建議使用+1模擬電路......這樣可以保存我的培根,因爲WebClient的流暢界面雖然很好,但完全可以嘗試模擬出來。 – f1dave