Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Java Assert

Utilizzo degli assert per testare le proprie applicazioni. Esempio pratico dell'uso e della gestione degli assert sia su un progetto che in un package.
Utilizzo degli assert per testare le proprie applicazioni. Esempio pratico dell'uso e della gestione degli assert sia su un progetto che in un package.
Link copiato negli appunti

Dalla versione JDK 1.4 è stato introdotto il costrutto assert che permette di testare le proprie applicazioni. Un assert non è altro che una condizione necessaria che lo sviluppatore ritiene si debba verificare in un determinato momento. Qualora tale condizione non è verificata, il programma viene terminato.

Il costrutto assert prevede due possibili forme:

  1. assert booleanExpression;
  2. assert booleanExpression : message.

Ad esempio, l'istruzione

assert x>0;

provoca la terminazione del programma qualora la variabile intera x sia minore o uguale di 0.

Questa istruzione corrisponde alla seguente forma compatta:

if (!(x>0))
throw new AssertException();

Il vantaggio principale del costrutto assert è che in fase di esecuzione può essere disabilitato. È possibile, quindi, utilizzare questa funzionalità esclusivamente per testare l'applicazione. In fase di messa in opera, è possibile disattivarla per eliminare il tempo di overhead legato alla sua gestione.

Analizziamo più da vicino questa caratteristica del linguaggio con un semplicissimo esempio:

Listato 1. Verifica che un numero in input sia positivo con assert

public class HtmlTestAssert{
public static void main(String[] args){
int a = Integer.parseInt(args[0]);
assert a > 0 : "a deve essere maggiore di 0" + a;
System.out.println("a è un numero positivo");
}
}

La nostra classe riceve in input un valore numerico. Mediante il costrutto assert verifichiamo che tale valore sia un numero positivo.

Di default le assert sono disabilitate. Per abilitarle è necessario utilizzare il flag -ea. È possible anche abilitare/disabilitare le assert esclusivamente per alcuni package o alcune classi.

Compiliamo la nostra classe ed eseguiamola con il seguente comando:

java -ea HtmlAssertTest -6

L'output sarà il seguente:

Exception in thread "main" java.lang.AssertionError: a (-6) deve essere maggiore di 0
at HtmlTestAssert.main(HtmlTestAssert.java:6)

Naturalmente l'espressione booleana può anche essere un metodo che restituisce un valore boolean. Il nostro esempio, può essere trasformato così:

Listato 2. Verifica che un numero in input sia positivo con dati booleani

public class HtmlTestAssert {
public static void main(String[] args){
assert test(Integer.parseInt(args[0])) : "a deve essere maggiore di 0";
System.out.println("a è un numero positivo");
}
public static boolean test(int a){
if (a > 0)
return true;
else
return false;
}
}

È possibile abilitare le assert anche soltanto all'interno di determinati package. Ad esempio, se volessimo abilitare le assert soltanto nel package it.html, potremmo lanciare il comando

java -ea:it.html HtmlAssertTest

Poiché il costrutto assert è stato introdotto dalla versione 1.4, è necessario prestare particolare attenzione alla fase di compilazione, tenendo presente la versione Java che viene utilizzata. Nelle precedenti versioni, infatti, la parola assert poteva essere utilizzata come nome di variabile o nome di metodo.

Analizziamo le possibili situazioni:

  1. se utilizziamo una versione precedente alla 1.4, non è possibile utilizzare le asserzioni poiché assert non è riconosciuta come una parola chiave;
  2. se utilizziamo la versione 1.4, e vogliamo abilitare il costrutto assert, bisogna compilare il codice con il flag "-source 1.4";
    Ad esempio:

    javac -source 1.4 HtmlAssertTest.java

    Se non utilizziamo il flag, il compilatore non considererà assert come parola chiave e quindi, verranno visualizzati dei warning, che segnalano allo sviluppatore che dalla versione 1.4, assert è una parola chiave del linguaggio.

  3. Se utilizziamo una versione superiore alla 1.4, ad esempio la 1.5, sarà implicitamente utilizzato il flag "-source 1.5".

Ti consigliamo anche