Hola, al probar que en determinado momento el programa tire la excepción correcta, me tira el siguiente warning:
Description Resource Path Location Type The serializable class ValorInvalidoException does not declare a static final serialVersionUID field of type long
Alguien sabe a qué se puede deber y si es por eso que la prueba falla? La excepción la lanza porque imprime el mensaje que corresponde, pero la prueba falla y marca ese warning.
Desde ya muchas gracias.
Hola Matías,
No, ese mensaje es simplemente una advertencia acerca de que la clase de la excepción no tiene un código de serialización asignado y aparece porque la clase Throwable (padre la clase Exception) implementa la interfaz Serializable. Esa interfaz sirve para poder persistir los estados de los objetos en archivos externos y lo veremos en detalle dentro de algunas clases. Pero no hace falta que hagas nada sobre esa advertencia y podés configurar tu IDE para que no te la muestre más (o simplemente ignorarla).
Si tu prueba falla debe ser por otro motivo. Acordate de que hay varias maneras de probar el correcto lanzamiento de las excepciones con JUnit. Una de ellas es esta:
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
public void JigglypuffCantaYPikachuNoPuedeAtacarPorqueEstaDormido() {
Pikachu pikachu = new Pikachu();
Jigglypuff jigglypuff = new Jigglypuff();
jigglypuff.cantar(pikachu); // pikachu pasa a estar dormido
thrown.expect(PokemonEstaDormidoException.class);
pikachu.impacTrueno(jigglypuff);
}
En esta prueba Jigglypuff canta y Pikachu pasa a estar dormido y, por lo tanto, cuando intenta atacar se lanza una excepción. Al ejecutar esta prueba JUnit se fija si la excepción es lanzada o no y, en función de eso determina si la prueba pasó o no. Pero no me va a aparecer la excepción ni se mostrará ningún mensaje por pantalla como decís que sucede en tu caso.
El código completo de este ejemplo se encuentra en este repositorio.
Saludos,
Tomás
Viendo ese código lo pude solucionar.
Muchas gracias Tomás.
Hola Tomás,
Una pregunta relacionada: ¿podemos hacer las pruebas en JUnit 5, usando el motor Jupiter? En mi eclipse (4.7.1a) me manda a eso por defecto y ya escribí todo para esa versión. La sintaxis para chequear que se lanzan excepciones es bastante diferente a JUnit 4, por eso pregunto.
Gracias y saludos
Horacio
Hola Horacio,
No hay problema siempre y cuando adecues el archivo ivy.xml para que se descargue la versión correcta de JUnit y corra las pruebas satisfactoriamente con Ant.
Lo primero que se hará con cada entrega es ejecutar Ant y verificar que el proceso de build y ejecución de pruebas funcione bien.
Saludos,
Tomás