Buenas a todos,
Tengo una consulta en como testear las exepciones, ya que de la forma que lo estoy haciendo no funciona.
Tengo por ejemplo, un metodo que, al encontrarse con algo que no puede suceder, tira una exepcion,
Un ejemplo
public void agregarProductoEnCompra(String unProducto, String unaCompra) throws CompraNoExisteError {
if(compras.isEmpty())
throw new CompraNoExisteError();
Todo esto ya teniendo una CompraNoExisteError que hereda de RuntimeExeption
Luego en el test tengo
@Test (expect = CompraNoExisteError.class)
public void test01CompraNoExisteErrorCuandoAgregoProductoSinQueExistaUnaCompra(){
Supermercado supermercado = new Supermercado();
supermercado.agregarProductoEnCompra("Papas Fritas","Compra");
A la hora de correr el test, falla el assert, ya que no recibio la exepcion que esperaba.
Es esta la manera correcta de hacer saltar una exepcion? O hay algun problema con el testeo
Muchas gracias!
Hola Manuel,
Sí, esa es una manera válida de probar el correcto lanzamiento de excepciones con JUnit 4 (salvo porque debería decir "expected" en lugar de "expect").
Si esa prueba falló es porque, como decís, no se lanzó la excepción que se esperaba y hay que corregir el código. La parte que mostraste está bien, pero seguramente debe haber un problema en algún otro lado. Con el debugger se encuentra fácilmente.
Te conviene escribir primero la prueba y luego la implementación, siguiendo la metodología TDD.
Fijate que hace poco escribí un resumen acerca de las distintas maneras de probar el lanzamiento de excepciones con JUnit que te puede ser de utilidad.
Saludos,
Tomás
Hola, una consulta, ¿esta mal si quiero utilizar el método de una clase de esta forma?
NombreClase nombre = (new NombreClase).unMetodoDeLaClaseQueQuieroUsar();
Necesitaría hacer esto porque en varias partes de la clase AlgoTrip saco viajes de un hash y me gustaría lanzar una excepción en caso de que este vacía, pero como sé que no estaría bien que AlgoTrip lance la excepción esta fue la única forma que se me ocurrió de hacerlo para lanzar esa excepción.
No entiendo bien qué es lo que querés hacer pero no sé por qué decís que no estaría bien que AlgoTrip lance la excepción. Si AlgoTrip (o Supermercado en el ejemplo de Manuel) tiene una colección de ciudades (o productos) y luego se intenta hacer algo con ellos, no estaría mal que sea AlgoTrip quien lance la excepción, dado que sí sería su responsabilidad. Una opción sería modelar una clase contenedora de de ciudades y que sea ella quien contenga el HashMap, pero no es necesario.
Saludos,
Tomás
Entiendo, había comprendido mal lo que leí en una publicación, ahora me quedó mas claro. Muchas gracias.