usar aserción
asertar( Assertion
) es una forma de depurar un programa. En Java
, use assert
palabras clave para implementar aserciones.
Veamos primero un ejemplo:
public static void main(String[] args) {
double x = Math.abs(-123.45);
assert x >= 0;
System.out.println(x);
}
Una declaración assert x >= 0;
es una aserción, y se espera que la condición de la aserción x >= 0 sea verdadera. Si se evalúa como falso, la aserción falla y se lanza AssertionError
.
Al usar la declaración de aserción, también puede agregar un mensaje de aserción opcional:
assert x >= 0 : "x must >= 0";
De esta forma, cuando la aserción falla, ```AssertionError`` traerá el mensaje x must >= 0, que es más conveniente para la depuración.
La característica de la aserción de Java es: cuando la aserción falla, se lanzará AssertionError
, lo que hará que el programa finalice y se cierre. Por lo tanto, las aserciones no se pueden usar para errores de programación recuperables y solo se deben usar durante el desarrollo y las pruebas.
Las aserciones no deben usarse para errores de programación recuperables. Por ejemplo:
void sort(int[] arr) {
assert arr != null;
}
La excepción debe lanzarse y capturarse en la capa superior:
void sort(int[] arr) {
if (arr == null) {
throw new IllegalArgumentException("array cannot be null");
}
}
Cuando usamos afirmar en un programa, por ejemplo, una afirmación simple:
// assert
public class Main {
public static void main(String[] args) {
int x = -1;
assert x > 0;
System.out.println(x);
}
}
Afirme que x debe ser mayor que 0, de hecho x es -1, la afirmación definitivamente falla. Ejecute el código anterior y descubra que el programa no arrojó AssertionError
, pero imprimió el valor de x normalmente.
¿Cómo es este cuatro gordo? ¿Por qué no funciona la declaración de afirmación?
Esto se debe a que JVM
la instrucción de afirmación está desactivada de forma predeterminada, es decir, la declaración de afirmación se ignora automáticamente y no se ejecuta.
Para ejecutar una declaración de aserción, debe pasar el parámetro -enableassertions` (abreviado como -ea) a la máquina virtual Java para habilitar las aserciones. Por lo tanto, el programa anterior debe ejecutarse en la línea de comando para que sea efectivo:
$ java -ea Main.java
Exception in thread "main" java.lang.AssertionError
at Main.main(Main.java:5)
También puede habilitar aserciones de forma selectiva para clases específicas. El parámetro de la línea de comando es: , lo que significa que solo habilita aserciones -ea:com.itranswarp.sample.Main
para esta clase.com.itranswarp.sample.Main
O habilite la aserción para un paquete específico, el parámetro de la línea de comando es: -ea:com.itranswarp.sample...
(tenga en cuenta que hay 3 al final), lo que significa com.itranswarp.sample
habilitar la aserción para este paquete.
En el desarrollo real, las afirmaciones rara vez se utilizan. Una mejor manera es escribir pruebas unitarias, y explicaremos el uso de JUnit más adelante.
resumen
La aserción es una forma de depuración. Se producirá un error de aserción AssertionError
, y la aserción solo se puede habilitar en la fase de desarrollo y prueba;
Los errores recuperables no se pueden afirmar, pero se deben lanzar excepciones;
Las aserciones rara vez se usan, un mejor enfoque es escribir pruebas unitarias.
Si ha ganado algo después de leer, también puede unirse a la discusión en la comunidad Knowledge Planet: