Falla o Error
28 05 2009Un error no se convierte en una falla hasta que te rehusas a corregirlo.
- Orlando A. Battista
Ultimamente me ha tocado ver a varios compañeros y amigos que a la hora de obtener una excepción inesperada en sus pruebas unitarias, las manejan dentro del test de la siguiente manera:
public void testIndexOutOfBoundsException() {
try{
//Este codigo arrojara una excepcion no esperada
ArrayList emptyList = new ArrayList();
Object o = emptyList.get(0);
}
catch (IndexOutOfBoundsException iobex){
fail();
iobex.printStackTrace();
}
}
Este manejo de errores aunque funcional, no es la manera optima de manejar los errores inesperados en nuestras pruebas por las sigueintes razones:
- Si aparece un error inesperado en tus pruebas, lo que quieres es parar la ejecución inmediatamente para corregirlo.
- Si tienes varias excepciones potenciales que son arrojadas en tu código, entonces tendras codigo redundante en la prueba solo para fallarla.
- Más lineas de código hacen que la prueba sea más díficil de leer.
- Semanticamente para JUnit una falla es diferente que un error. (A partir de JUnit 4.x esto cambia)
Entonces, por eso y muchas cosas más (:)), una manera de mejorar la forma en que manejamos errores no esperados es haciendo lo siguiente:
public void testIndexOutOfBoundsException() throws IndexOutOfBoundsException{
//Este codigo arrojara una excepcion no esperada
ArrayList emptyList = new ArrayList();
Object o = emptyList.get(0);
}
Así está prueba al fallar detentra el proceso y despues de explicar a tus compañeros como pudiste obviar ese caso y tragarte tu orgullo, lo tendrás de arreglar.
Ahora, la pregunta es, ¿Qué pasa si quiero probar que de verdad mi código arroje una excepción bajo ciertas condiciones? En este caso, lo primero que me queda es felicitarte por que eso me indica no solo estás probando el camino amarillo, sino casos raros que pudieran generar errores, entonces, si esto pasa haremos lo siguiente en el código:
@Test(expected=IndexOutOfBoundsException.class)
public void testIndexOutOfBoundsException() {
ArrayList emptyList = new ArrayList();
Object o = emptyList.get(0);
}
Si se fijan, JUnit 4 nos proveé de una annotation para arrojar la excepción y de esa manera podemos probar nuestro código esta funcionando como es corrector. Para más información sigan el siguiente link: http://junit.sourceforge.net/doc/faq/faq.htm#tests_7 . Y recuerda si alguíen te pregunta por que tus tests arrojan excepciones responde, “Por que una falla no es lo mismo que un error”.
Categories : Programacion

Estos ultimos días he estado sin proyecto ya que como consultor siempre hay un pequeño descanso entre proyectos para tomar vacaciones, recargar energías, quitarse lo malhumorado y practicar nuevas tecnologías, muchos toman el descanso de manera diferente, a mi en lo partícular me gusta practicar programación. El porque me gusta hacerlo será el tema de esta entrada (nombraré al post entrada en un afan de hacerlo todo en Español, aunque sigue sin convencerme el termino "entrada").




