Ir al contenido

throw new

En Java, la instrucción throw se utiliza para lanzar explícitamente una excepción durante la ejecución de un programa. En el contexto de pruebas unitarias con JUnit, este mecanismo es fundamental para validar que el sistema responde correctamente ante condiciones anómalas o violaciones de lógica de negocio.


throw es una palabra reservada del lenguaje Java que permite generar manualmente una excepción en tiempo de ejecución. Para ello, se emplea en conjunto con la creación de un nuevo objeto que extienda la clase Throwable.

throw new NombreDeLaExcepcion("Mensaje descriptivo");
if (monto > saldoDisponible) {
throw new IllegalArgumentException("Dinero insuficiente");
}

En este ejemplo, se lanza una excepción cuando el monto a transferir excede el saldo disponible, lo que constituye una violación de las reglas de negocio.


¿Qué ocurre cuando se lanza una excepción?

Sección titulada «¿Qué ocurre cuando se lanza una excepción?»
  • Cuando se ejecuta una instrucción throw, la ejecución del método se interrumpe inmediatamente.

  • El flujo del programa se transfiere al manejador de excepciones más cercano (bloque try-catch) o, si no existe, el programa termina con error.

  • El objeto lanzado (new Exception(...)) es una instancia de una clase que hereda de Throwable, como RuntimeException, IOException, IllegalArgumentException, etc.


En el diseño de pruebas con JUnit, throw permite definir comportamientos esperados ante situaciones inválidas, lo que luego puede ser verificado con la aserción assertThrows.

@Test
void testDebitoInvalido() {
Cuenta cuenta = new Cuenta(1000);
assertThrows(IllegalArgumentException.class, () -> {
cuenta.transferir(1500); // Lanza una excepción
});
}

Aquí se espera que el método transferir() lance una excepción cuando el monto es mayor al saldo. La instrucción throw en el método es la que activa este comportamiento.


Se debe utilizar throw cuando:

  • Se desea interrumpir la ejecución normal del programa debido a una violación de las reglas de negocio.

  • Se deben notificar errores que no pueden ser manejados localmente.

  • Se requiere que las clases/métodos sean robustos y predecibles ante entradas inválidas o estados inconsistentes.

Algunos casos típicos incluyen:

  • Validaciones de entrada (null, rangos, tipos).

  • Fallos de lógica (por ejemplo, operaciones no permitidas).

  • Excepciones personalizadas para escenarios específicos del dominio.


La expresión throw new Excepcion(...) construye un objeto de tipo excepción, es decir, una instancia de una subclase de Throwable. Este objeto:

  • Contiene información sobre el tipo de error.

  • Puede incluir un mensaje descriptivo.

  • Opcionalmente puede incluir otra excepción como causa (Throwable cause).