Saltar al contenido

JUnit 4 Tipo de excepción esperada

Indagamos por distintos sitios para así regalarte la solución para tu duda, en caso de dificultades puedes dejarnos la pregunta y te contestamos sin falta, porque estamos para servirte.

Solución:

De hecho, hay una alternativa a la @Test(expected=Xyz.class) en JUnit 4.7 usando Rule y ExpectedException

En su caso de prueba declara un ExpectedException anotado con @Ruley asígnele un valor predeterminado de ExpectedException.none(). Luego, en su prueba que espera una excepción, reemplaza el valor con el valor esperado real. La ventaja de esto es que sin usar el feo método try/catch, puede especificar aún más cuál era el mensaje dentro de la excepción.

@Rule public ExpectedException thrown= ExpectedException.none();

@Test
public void myTest() 
    thrown.expect( Exception.class );
    thrown.expectMessage("Init Gold must be >= 0");

    rodgers = new Pirate("Dread Pirate Rodgers" , -100);

Con este método, es posible que pueda probar que el mensaje en la excepción genérica sea algo específico.

ADICIÓN
Otra ventaja de usar ExpectedException es que puede abarcar con mayor precisión la excepción dentro del contexto del caso de prueba. Si solo estás usando @Test(expected=Xyz.class) anotación en la prueba, entonces la excepción Xyz puede lanzarse en cualquier parte del código de prueba, incluida cualquier configuración de prueba o afirmaciones previas dentro del método de prueba. Esto puede conducir a un false positivo.

Usando ExpectedException, puede diferir la especificación del thrown.expect(Xyz.class) hasta después de cualquier configuración y confirmación previa, justo antes de invocar realmente el método bajo prueba. Por lo tanto, el alcance de la excepción que se generará con la invocación del método real será más preciso que con cualquiera de los dispositivos de prueba en sí.

JUnit 5 NOTA:

JUnit 5 JUnit Júpiter ha eliminado @Test(expected=...), @Rule y ExpectedException en total. Se reemplazan por los nuevos. assertThrows()que requiere el uso de Java 8 y sintaxis lambda. ExpectedException todavía está disponible para su uso en JUnit 5 a través de JUnit Vintage. También JUnit Jupiter también seguirá siendo compatible con JUnit 4 ExpectedException mediante el uso del módulo junit-jupiter-migrationsupport, pero solo si agrega una anotación adicional de nivel de clase de @EnableRuleMigrationSupport.

Podrías usar previsto en @Prueba anotación o proporcionar un bloque catch explícito y emitir un fallar si el flujo del programa no es el esperado.

@Test(expected=Exception.class) // java.lang.Exception
public static void exceptionTest() throws Exception 
    rodgers = new Pirate("Dread Pirate Rodgers" , -100);


@Test
public static void exceptionTest() throws Exception 
    try 
        rodgers = new Pirate("Dread Pirate Rodgers" , -100);
        fail("should not reach this");
     catch(Exception e) 
        // ok
    

Mi preferencia personal es la primera solución.

Puede usar JUnit ‘esperado’ para probar excepciones:

@Test(expected = ExceptionYouWishToTestFor.class)  
public void divisionWithException()   
    // Test Code

Después de eso, depende de usted lanzar esa excepción en particular en su código.

Si sostienes algún dilema o forma de arreglar nuestro tutorial puedes ejecutar una interpretación y con gusto lo analizaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *