Las pruebas unitarias son un elemento muy importante en la programación con Java, ya que es necesario siempre asegurarse de que el código funcione de la manera correcta. Una de las herramientas que podemos usar para realizar estas pruebas es la palabra reservada assert en Java, la cual, pese a no ser tan usada como otras herramientas, puede llegar a ser muy eficaz para depurar y validar el código y su comportamiento.
Por eso, este artículo lo dedicaremos a explicarte cómo funciona el assert en Java para manejar pruebas unitarias.
¿Qué es assert en Java?
La palabra reservada assert en Java nos permite verificar que ciertas condiciones en nuestro código se cumplan. El assert en Java está diseñado para usarse en escenarios en donde nosotros como desarrolladores estamos seguros de que una condición específica debe cumplirse en un punto establecido del programa.
Lo curioso con el assert en Java es que puedes activarlo o desactivarlo al ejecutar el programa, esto hace que sea una herramienta muy flexible para depurar sin necesidad de afectar el rendimiento en producción.
El assert en Java funciona del siguiente modo: se evalúa una expresión booleana y, si el resultado es false, se lanza una excepción de tipo AssertionError. Veamos un ejemplo básico:
public class AssertExample {
public static void main(String[] args) {
int x = 5;
assert x > 0;
System.out.println("El valor de x es mayor que 0");
}
}
En este caso el assert comprueba que el valor de x sea mayor que 0. Si esta condición no se cumple, el programa lanzará un AssertionError y detendrá su ejecución.
¿Cómo saber si debo usar el assert en Java?
El uso de assert en Java es recomendable cuando estás en la etapa de desarrollo o depuración del código. Veamos algunos casos puntuales en los que puedes usarlo:
- Precondiciones: Puedes usar assert para asegurarte de que las condiciones necesarias para que un método privado funcione correctamente se cumplan.
- Postcondiciones: Al finalizar la ejecución de un método, puedes verificar que el resultado cumple con lo esperado.
- Invariantes de clase: Sirve para validar que el estado de una clase sea correcto y consistente durante su ciclo de vida.
- Código no alcanzable: Puedes usarlo para marcar fragmentos de código que, en teoría, no deberían ejecutarse, como un default en una sentencia switch.
Ejemplo: Comprobación de postcondiciones
En este ejemplo tenemos un método que genera un número aleatorio entre 0 y 9. Puedes usar un assert para asegurarte de que este número esté dentro del rango correcto:
import java.util.Random;
public class Main {
private Random random;
public Main() {
random = new Random();
}
public int nextNumber() {
int i = random.nextInt(40);
assert i >= 0 && i < 10 : String.format("El número devuelto no cumple con la condición (%d)", i);
return i;
}
public static void main(String[] args) {
Main main = new Main();
System.out.println(main.nextNumber());
}
}
En nuestro caso si el número generado no está entre 0 y 9, el assert lanzará una excepción con el mensaje de error.
¿Cuándo NO deberías usar assert en Java?
Aunque los assert son una herramienta poderosa, no debes utilizarlos en todos los casos. Estos son algunos de los casos puntuales en los que es mejor evitar su uso:
- Métodos públicos: No uses assert para validar argumentos en métodos públicos, ya que estos deben manejar errores que puedan ocurrir en producción y no depender de la depuración.
- Ejecutar tareas: No utilices assert para realizar acciones críticas del programa. Como los assert pueden desactivarse en producción, las tareas que dependen de ellos no se ejecutarían.
Activar y desactivar los asserts en Java
Por defecto, los assert están desactivados cuando ejecutas un programa en Java. Para activarlos, debes pasar la opción -ea (enable assertions) a la Java Virtual Machine cuando ejecutes tu código. Por ejemplo:
java -ea Main
Esto activará los assert y, si alguna condición no se cumple, lanzará una AssertionError. Si no los activas, el código que contiene assert será ignorado y no afectará el rendimiento del programa.
¿Qué diferencia existe entre los assert y las excepciones?
Es común preguntarse cuándo usar assert y cuándo lanzar una excepción. Aunque ambos manejan errores, tienen propósitos diferentes:
- Excepciones: Se usan para manejar errores que pueden ocurrir en producción, como entradas incorrectas de usuarios o fallos en la conexión a la base de datos.
- Assert: Se utiliza durante el desarrollo para validar que el código se comporta como debería y que los errores se detectan antes de que afecten al programa en ejecución.
Una excepción permite que el programa continúe su ejecución si es manejada adecuadamente. Por otro lado, un assert termina la ejecución del programa, ya que no se captura el AssertionError.
Si te interesó este tema y ahora quieres seguir aprendiendo sobre programación y los distintos lenguajes que existen, puedes empezar con el bootcamp java, con el cual adquirirás los conocimientos básicos para empezar a crear tus propios programas e ir preparándote para el mundo laboral. ¡No desperdicies la oportunidad de seguir creciendo laboralmente!