Uso de assert en java

De ChuWiki

Una ayuda a la hora de depurar nuestros proyectos puede ser el uso de assert. Supón que tenemos un método que recibe un parámetro que no puede ser null. Normalmente, hacemos este tipo de cosas

public void metodo (Object parametro) {
   if (null==parametro) {
      log.error("El parametro es null"); // Otros usan System.out :(
      return;
   }
   // Aqui el codigo correcto.
}

Esto protege nuestro código, pero nos impide detectar los fallos rápidamente. Al ejecutar, ese método no hará lo que tiene que hacer y veremos que algo en nuestra aplicación no funciona. Ponte a buscar en el log por qué y detectar ese "El parámetro es null" muchas líneas atrás en el log. (Ver Qué es log4j para saber más sobre el log)

Como solución a esto, podemos usar los assert de java (disponibles desde java 1.4). El código con el assert sería así


 public void metodo (Object parametro) {
 
    assert parametro!=null;
 
    if (null==parametro) {
       log.error("El parametro es null"); // Otros usan System.out :(
       return;
    }
    // Aqui el codigo correcto.
 }

De esta forma, si ejecutamos nuestro código java de forma normal, ese assert es ignorado, por lo que es como si no hubiéramos puesto nada. Nuestra aplicación funcionará igual de mal que antes y no se caerá.

Sin embargo, si ejecutamos con la opción -ea (enable asserts posiblemente)

java -ea MiAplicacion.jar

entonces sí se hace caso de los assert y saltará una excepción inmediatamente si nuestro parámetro es null. En vez de ir evitando el error de un sitio a otro y ver que la aplicación no funciona, arrancando con -ea veremos inmediatamente cual es el primer sitio en el que falla algo.

Ventajas:

  • Aunque se ponga assert, su ejecución es opcional con -ea. Podemos arrancar la aplicación en modo "detección de fallos" o en modo "haz lo que puedas, pero aguanta".
  • Se detectan los fallos en la ejecución lo más pronto posible.

Por ello, conviene poner assert siempre y configurar nuestro IDE para que ejecute con la opción -ea. Se supone que en IDE estamos desarrollando y depurando, no ejecutando la aplicación en serio. En eclipse, por ejemplo, se ponen en "Run Configurations" -> pestaña "Arguments" y en la caja "VM arguments" poner -ea

En los sitios donde corre realmente nuestro proyecto, podemos ponerlo o no, según nos interese.