es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>

}
“`

Tags:  , , , ,

Answer

  1. Avatar for 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étodo getMethodWithHeader y que lance una HttpClientErrorException en lugar de devolver una respuesta exitosa. Esto se puede lograr utilizando el método doThrow de Mockito, como se muestra a continuación:

    @Test
    public void callRespectiveAPITest2() {
        // Simulación de respuesta
        JsonObject responseBody = new JsonObject();
        responseBody.addProperty("success", true);
        ResponseEntity<string> response = new ResponseEntity<>(responseBody.toString(), HttpStatus.OK);
    
        // Simulación de métodos de apiUrlUtil
        when(apiUrlUtil.getAccessToken(Mockito.anyString())).thenReturn("accessToken");
        when(apiUrlUtil.getMethodWithHeader(Mockito.anyString(), Mockito.anyString()))
            .thenThrow(new HttpClientErrorException(HttpStatus.NOT_FOUND));
        when(apiUrlUtil.getNextUrl(Mockito.any())).thenReturn("nextUrl");
    
        // Llamar al método y verificar que se lanzó la excepción
        Assertions.assertThrows(HttpClientErrorException.class, () -> {
            shopifyService.callRespectiveAPI("nextUrl", "accessToken");
        });
    }
    

    En este código de prueba modificado, simulamos el método getMethodWithHeader para que lance una HttpClientErrorException con el código de estado NOT_FOUND. Luego verificamos que el método callRespectiveAPI lance la misma excepción cuando se llama con los parámetros nextUrl y accessToken. Esto se puede hacer utilizando el método assertThrows de JUnit 5.

Comments are closed.