2017-07-25 16 views
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可以用作端點?

回答

1

我覺得這樣做的內置的彈簧支撐仍在進行 - https://jira.spring.io/browse/SPR-15286

我真的很喜歡wiremock到(集成 - )測試這樣的場景。特別是因爲你用這個測試了整個序列化和反序列化。通過電線連接,您可以啓動一個服務器,使用預定義的存根控制您的請求。

+0

man,建議使用+1模擬電路......這樣可以保存我的培根,因爲WebClient的流暢界面雖然很好,但完全可以嘗試模擬出來。 – f1dave

相關問題