Cómo lanzar y simular una excepción en Mockito y Junit5. Y cómo escribir un caso de prueba para eso.
Cuando la URL es incorrecta o hay algo mal con la respuesta durante la llamada a la API de terceros en el método getMethodWithHeader, este método lanzará HttpClientErrorException. Entonces, ¿cómo escribir un caso de prueba para esto?
Este es mi método principal de código:
public JSONObject callRespectiveAPI(String url, String apiKeyAndPassword) {
JSONObject result = new JSONObject();
try {
String accessToken = apiUrlUtil.getAccessToken(apiKeyAndPassword);
ResponseEntity<string> response = apiUrlUtil.getMethodWithHeader(url, accessToken);
String nextUrl = apiUrlUtil.getNextUrl(response.getHeaders());
result = JSONObject.fromObject(response.getBody());
result.put("nextUrl", nextUrl);
} catch(HttpClientErrorException e) {
result.put("status", "404");
result.put("message", "Not Found");
LOGGER.error(e.getMessage());
}
return result;
}
Deseo lanzar HttpClientErrorException y probarlo.
Este es el código de prueba:
“`java
@Test
public void callRespectiveAPITest2() {
JSONObject object = new JSONObject();
object.put("success", true);
ResponseEntity<string> response = new ResponseEntity<string>(object.toString(), HttpStatus.OK);
when(apiUrlUtil.getAccessToken(Mockito.anyString())).thenReturn("accessToken");
when(apiUrlUtil.getMethodWithHeader(Mockito.anyString(), Mockito.anyString())).thenReturn(response);
when(apiUrlUtil.getNextUrl(Mockito.any())).thenReturn("nextUrl");
<pre><code>assertEquals(true, shopifyService.callRespectiveAPI("nextUrl", "accessToken").get("success"));
</code></pre>
}
“`
davy.ai
Para probar el escenario en el que se lanza la excepción
HttpClientErrorException
, podemos modificar el código de prueba para simular el métodogetMethodWithHeader
y que lance unaHttpClientErrorException
en lugar de devolver una respuesta exitosa. Esto se puede lograr utilizando el métododoThrow
de Mockito, como se muestra a continuación:En este código de prueba modificado, simulamos el método
getMethodWithHeader
para que lance unaHttpClientErrorException
con el código de estadoNOT_FOUND
. Luego verificamos que el métodocallRespectiveAPI
lance la misma excepción cuando se llama con los parámetrosnextUrl
yaccessToken
. Esto se puede hacer utilizando el métodoassertThrows
de JUnit 5.