library how fail ejemplo asserttrue asserts java assert assertion

java - how - ¿Qué hace la palabra clave "assert"?



how to use assert java (8)

Utilice esta versión de la declaración assert para proporcionar un mensaje de detalle para el AssertionError. El sistema pasa el valor de Expression2 al constructor AssertionError apropiado, que utiliza la representación de cadena del valor como el mensaje de detalle del error.

El propósito del mensaje de detalle es capturar y comunicar los detalles de la falla de aserción. El mensaje debería permitirle diagnosticar y, en última instancia, corregir el error que provocó la falla de la aserción. Tenga en cuenta que el mensaje de detalle no es un mensaje de error de nivel de usuario, por lo que generalmente no es necesario hacer que estos mensajes sean comprensibles de manera aislada o internacionalizarlos. El mensaje de detalle debe interpretarse en el contexto de una traza de pila completa, junto con el código fuente que contiene la aserción fallida.

JavaDoc

Esta pregunta ya tiene una respuesta aquí:

¿Qué assert hacer? Por ejemplo en la función:

private static int charAt(String s, int d) { assert d >= 0 && d <= s.length(); if (d == s.length()) return -1; return s.charAt(d); }



Assert lanza un AssertionError si ejecuta su aplicación con las aserciones activadas.

int a = 42; assert a >= 0 && d <= 10;

Si ejecuta esto con, digamos: java -ea -jar peiska.jar

Lanzará un java.lang.AssertionError


Aunque he leído mucha documentación sobre esto, todavía estoy confundido sobre cómo, cuándo y dónde usarlo.

Haz que sea muy simple de entender:

Cuando tienes una situación similar a esta:

String strA = null; String strB = null; if (2 > 1){ strA = "Hello World"; } strB = strA.toLowerCase();

Puede recibir una advertencia (mostrando una línea amarilla en strB = strA.toLowerCase ();) que strA podría producir un valor NULL para strB. Aunque sabes que strB es absolutamente no será nulo al final, por si acaso, usas assert para

1. Desactiva la advertencia.

2. Lanzar un error de excepción. Ocurre lo peor (cuando ejecuta su aplicación).

En algún momento, cuando compila su código, no obtiene su resultado y es un error. Pero la aplicación no se bloqueará y pasará un momento muy difícil para encontrar dónde está causando este error.

Entonces, si pones afirma, así:

assert strA != null; //Adding here strB = strA .toLowerCase();

usted le dice al compilador que strA no es absolutamente un valor nulo, puede apagar la advertencia ''pacíficamente''. SI es NULO (sucede el peor de los casos), detendrá la aplicación y le lanzará un error para localizarla.


Las afirmaciones generalmente se usan principalmente como un medio para verificar el comportamiento esperado del programa. Debería provocar un bloqueo en la mayoría de los casos, ya que las suposiciones del programador sobre el estado del programa son falsas. Aquí es donde entra el aspecto de depuración de las aserciones. Crean un punto de control que simplemente no podemos ignorar si queremos tener un comportamiento correcto.

En su caso, hace la validación de datos en los parámetros entrantes, aunque no evita que los clientes hagan un mal uso de la función en el futuro. Especialmente si no se incluyen (y no deberían) en las compilaciones de lanzamiento.


Si -enableassertions su programa con -enableassertions (o -ea para abreviar), entonces esta declaración

assert cond;

es equivalente a

if (!cond) throw new AssertionError();

Si inicia su programa sin esta opción, la declaración de afirmación no tendrá ningún efecto.

Por ejemplo, assert d >= 0 && d <= s.length(); , como se publicó en su pregunta, es equivalente a

if (!(d >= 0 && d <= s.length())) throw new AssertionError();

(Si -enableassertions con -enableassertions eso es).

Formalmente, la especificación del lenguaje Java: 14.10. La declaración de assert dice lo siguiente:

14.10. La declaración de assert
Una aserción es una declaración de afirmación que contiene una expresión booleana. Una afirmación está habilitada o deshabilitada . Si la aserción está habilitada, la ejecución de la aserción causa la evaluación de la expresión booleana y se informa un error si la expresión se evalúa como false . Si la afirmación está deshabilitada, la ejecución de la afirmación no tiene ningún efecto en absoluto.

Donde "habilitado o deshabilitado" se controla con el interruptor -ea y "Se informa un error" significa que se lanza un AssertionError .

Y finalmente, una característica menos conocida de assert :

Puede agregar : "Error message" como este:

assert d != null : "d is null";

para especificar cuál debería ser el mensaje de error del AssertionError arrojado.

Esta publicación ha sido reescrita como un artículo here .



assert es una herramienta de depuración que provocará que el programa arroje una excepción AssertionFailed si la condición no es verdadera. En este caso, el programa arrojará una excepción si cualquiera de las dos condiciones posteriores a ella se evalúa como falsa. En términos generales, assert no debe usarse en el código de producción