如何使用 Junit4 和 Mockito創建這個回傳void的私有方法的單元測驗?
private void fetchToken() {
try {
webClientBuilder.build().post().uri("http://localhost:8082/token")
.headers(httpHeaders -> httpHeaders.setBasicAuth("anyusername", "password")).retrieve()
.bodyToMono(Token.class).block();
} catch (Exception e) {
System.out.println("Error: " e.getMessage());
}
uj5u.com熱心網友回復:
像這樣使用mockito
@Mock
private WebClient webClient;
@Mock
private WebClient.RequestBodyUriSpec uriSpec;
@Mock
private WebClient.RequestBodyUriSpec headerSpec;
@Test
void someTest(){
WebClient.RequestBodyUriSpec bodySpec = mock(WebClient.RequestBodyUriSpec.class);
WebClient.ResponseSpec response = mock(WebClient.ResponseSpec.class);
when(webClient.post()).thenReturn(uriSpec);
when(uriSpec.uri(uri)).thenReturn(headerSpec);
doReturn(bodySpec).when(headerSpec).bodyValue(body);
when(bodySpec.retrieve()).thenReturn(response);
}
uj5u.com熱心網友回復:
一種更簡潔且不那么脆弱的方法是不要模擬WebClient,而是使用工具WireMock或MockWebServer模擬外部 API 。
我通常使用 MockWebServer。您可能會說這是一個集成測驗,但不是單元測驗。但就速度而言,MockWebServer 非常快,就像單元測驗一樣。此外,它允許您使用真實WebClient實體來真正練習完整的 HTTP 堆疊,并且您可以更加自信地測驗所有內容。
您可以執行以下操作:
public class SomeTest {
private MockWebServer server;
@Test
public void someTest(){
MockWebServer server = new MockWebServer();
server.start();
HttpUrl baseUrl = server.url("/token");
//stub the server to return the access token response
server.enqueue(new MockResponse().setBody("{\"access_token\":\"ABC\"}"));
//continues execute your test
....
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/513959.html
上一篇:測驗Kotest測驗
下一篇:0%覆寫率Junit4
