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 se escribe un test de fallo (J-Unit) que arroje JAXBException cuando el unmarshaller se inicializa en el constructor?

Intenté escribir una prueba de fallos para un código simple como este:

public class XmlDeserializer<T> implements Deserializer<T>
{
    private final Unmarshaller unmarshaller;

<pre><code>public XmlDeserializer(Class<T> clazz) 
{
    try
    {
        this.unmarshaller = JAXBContext.newInstance(clazz).createUnmarshaller();
    }
    catch (JAXBException e)
    {
        throw new RuntimeException(e);
    }
}
</code></pre>

<p>}

Cuando en el constructor capturamos la excepción JAXBException, pero resultó que no fue tan fácil.

Intenté usar @Test(expected = RuntimeException), @Rule para la excepción esperada, pasé diferentes clases al constructor. No pude usar reflection o Mockito en este caso.

Pasé un par de horas en esto, pero no pude encontrar una solución en Google o Stackoverflow.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en java, exception, junit y jaxb, sugeriría intentar el siguiente enfoque para escribir un test de falla para el código proporcionado:

    1. Crea una clase de prueba para XmlDeserializer e importa las bibliotecas junit y jaxb necesarias.
    2. Define un método de prueba para comprobar si el constructor lanza una excepción en tiempo de ejecución si se pasa una clase inexistente como parámetro.

    3. Utiliza el método assertThrows de Junit 5 para afirmar que el constructor lanza una RuntimeException cuando se pasa una clase inexistente.

    Aquí tienes un ejemplo de cómo debería verse el método de prueba:

    @Test
    void testConstructorWithInvalidClass(){
        assertThrows(RuntimeException.class, () -> {
            new XmlDeserializer<>(NonExistantClass.class);
        });
    }
    

    En este ejemplo, utilizamos assertThrows para comprobar si el constructor lanza una RuntimeException cuando se pasa una instancia de NonExistantClass.

    Al utilizar este enfoque, podemos asegurarnos de que el test fallará si no se lanza la RuntimeException, validando así las capacidades de manejo de errores del constructor.

Comments are closed.