Usar aserciones de Java

1. Introducción

La palabra clave assert de Java permite a los desarrolladores verificar rápidamente ciertas suposiciones o el estado de un programa.

En este artículo, veremos cómo usar la palabra clave assert de Java .

2. Historia de las afirmaciones de Java

La palabra clave de aserción de Java se introdujo en Java 1.4, por lo que existe desde hace bastante tiempo. Sin embargo, sigue siendo una palabra clave poco conocida que puede reducir drásticamente el texto estándar y hacer que nuestro código sea más legible.

Por ejemplo, muchas veces en nuestro código necesitamos verificar ciertas condiciones que podrían impedir que nuestra aplicación funcione correctamente. Normalmente escribimos algo como esto:

Connection conn = getConnection(); if(conn == null) { throw new RuntimeException("Connection is null"); }

Usando afirmaciones podemos quitar el si y el tiro declaración con una sola aserción comunicado.

3. Habilitación de afirmaciones de Java

Debido a que las aserciones de Java utilizan la palabra clave assert , no se necesitan bibliotecas ni paquetes para importar.

Tenga en cuenta que antes de Java 1.4 era perfectamente legal usar la palabra "afirmar" para nombrar variables, métodos, etc. Esto potencialmente crea un conflicto de nombres cuando se usa un código antiguo con versiones más recientes de JVM.

Por lo tanto, para compatibilidad con versiones anteriores, la JVM deshabilita la validación de aserción de forma predeterminada . Deben habilitarse explícitamente mediante el argumento de línea de comando -enableassertions o su abreviatura -ea:

java -ea com.baeldung.assertion.Assertion

En este ejemplo, habilitamos las afirmaciones para todas las clases.

También podemos habilitar aserciones para paquetes y clases específicos:

java -ea:com.baeldung.assertion... com.baeldung.assertion.Assertion

Aquí, hemos habilitado las aserciones para todas las clases del paquete com.baeldung.assertion .

Asimismo, se pueden deshabilitar para paquetes y clases específicos usando el argumento de línea de comando -disableassertions o su abreviatura -da . También podemos usar estos cuatro argumentos juntos.

4. Uso de afirmaciones de Java

Para agregar aserciones, simplemente use la palabra clave assert y dele una condición booleana :

public void setup() { Connection conn = getConnection(); assert conn != null; }

Java también proporciona una segunda sintaxis para aserciones que toma una cadena, que se utilizará para construir el AssertionError si se lanza una:

public void setup() { Connection conn = getConnection(); assert conn != null : "Connection is null"; }

En ambos casos, el código verifica que una conexión a un recurso externo devuelva un valor no nulo. Si ese valor es nulo, la JVM lanzará automáticamente un AssertionError .

En el segundo caso, la excepción tendrá el detalle adicional que se mostrará en el seguimiento de la pila y puede ayudar a depurar el problema.

Echemos un vistazo al resultado de ejecutar nuestra clase con las aserciones habilitadas:

Exception in thread "main" java.lang.AssertionError: Connection is null at com.baeldung.assertion.Assertion.setup(Assertion.java:15) at com.baeldung.assertion.Assertion.main(Assertion.java:10)

5. Manejo de un error de afirmación

La clase AssertionError extiende Error , que a su vez extiende Throwable . Esto significa que AssertionError es una excepción sin marcar.

Por lo tanto, los métodos que usan aserciones no están obligados a declararlos, y el código de llamada adicional no debería intentar capturarlos.

Los errores de aserción están destinados a indicar condiciones irrecuperables en una aplicación, por lo que nunca intente manejarlas o intentar la recuperación.

6. Mejores prácticas

Lo más importante que debe recordar acerca de las afirmaciones es que se pueden deshabilitar, por lo que nunca asuma que se ejecutarán .

Por lo tanto, tenga en cuenta las siguientes cosas cuando utilice afirmaciones:

  • Siempre verifique los valores nulos y los opcionales vacíos cuando corresponda
  • Evite usar aserciones para verificar entradas en un método público y, en su lugar, use una excepción no verificada como IllegalArgumentException o NullPointerException
  • No llame a métodos en condiciones de aserción y en su lugar asigne el resultado del método a una variable local y use esa variable con aserción
  • Las afirmaciones son excelentes para lugares en el código que nunca se ejecutarán, como el caso predeterminado de una declaración de cambio o después de un bucle que nunca termina.

7. Conclusión

La palabra clave assert de Java ha estado disponible durante muchos años, pero sigue siendo una característica poco conocida del lenguaje. Puede ayudar a eliminar una gran cantidad de código repetitivo, hacer que el código sea más legible y ayudar a identificar errores en las primeras etapas del desarrollo del programa.

Solo recuerde que las aserciones no están habilitadas por defecto, así que nunca asuma que se ejecutarán cuando se usen en el código.

Como siempre, el código fuente completo está disponible en GitHub.