CodeGym /Java Blog /Random-IT /Asserzioni Java
John Squirrels
Livello 41
San Francisco

Asserzioni Java

Pubblicato nel gruppo Random-IT
Dichiarazione di asserzione In Java viene utilizzata per testare determinati presupposti sullo stato di un programma durante l'esecuzione. Ciò aiuta a rilevare facilmente gli errori ed eseguire il debug del programma. Un'istruzione di asserzione in Java viene scritta utilizzando la parola chiave assert Java seguita da un'espressione booleana. Se l'espressione risulta vera, l'asserzione passa silenziosamente e il programma fa il suo lavoro. Se il risultato è falso, l'asserzione fallisce e viene generato un AssertionError . Facciamo un esempio di un programma con asserzioni Java.

//Assertion in Java example
public class AssertDemo1 {
   public static void main(String[] args) {
       int x = 5;
       assert x == 5 : "x should be 5";
       System.out.println(x);
   }
}
Qui l'espressione è vera, quindi il programma continua semplicemente il suo lavoro. L'output è proprio come previsto:
5

Esempio di errore di asserzione

In Java, un AssertionError è una sottoclasse della classe Error e viene generato quando un'asserzione fallisce. Le asserzioni in Java vengono generalmente utilizzate per verificare che le precondizioni, le postcondizioni o gli invarianti siano veri. Come abbiamo detto di seguito, viene generato un AssertionError quando un'asserzione non riesce a risultare vera. Ora riscriviamo il nostro programma in modo che l'espressione booleana sia falsa.

//AssertionError example
public class AssertDemo1 {
   public static void main(String[] args) {
       int x = 5;
       assert x == 7 : "x should be 7";
       //here should be AssertionError
       System.out.println(x);
   }
}
Bene, lo eseguiamo e l'output è...
5
Qualcosa è sicuramente andato storto nel nostro esempio! Dovremmo avere un AssertionError qui perché la nostra x è 5 e l'asserzione si aspetta che sia 7. Cosa c'è che non va? È importante notare che le asserzioni Java possono essere semplicemente disabilitate nella JVM, quindi non dovrebbero essere utilizzate come unico mezzo di controllo degli errori in un programma. Sono utili per il debug e il test, ma non dovrebbero essere utilizzati per il codice di produzione. Quindi, per utilizzare le asserzioni, è necessario abilitarle utilizzando l'opzione vm -ea (o -enableassertions). Se stai lavorando con la riga di comando, puoi utilizzare il comando successivo per il tuo programma AssertDemo1:
java -ea AssertDemo1
se abiliti le asserzioni ed esegui nuovamente lo stesso programma otterrai quanto segue:
Eccezione nel thread "main" java.lang.AssertionError: x dovrebbe essere 7 in AssertDemo1.main(AssertDemo1.java:4)
Questo è il punto.

Come abilitare le eccezioni in IntelliJ IDEA

  1. Andare al menu Esegui → Modifica configurazioni....
  2. Inserisci il parametro -ea nella riga Opzioni VM
Asserzioni Java - 1Ora le asserzioni sono abilitate e puoi usarle.

Asserzioni per unit test in Java

In Java, il test unitario è una tecnica che prevede il test di singoli moduli di codice per assicurarsi che funzionino correttamente. Le asserzioni vengono comunemente utilizzate negli unit test in Java per verificare che il codice testato funzioni come previsto. Nel test unitario, un'unità di codice, ad esempio un metodo particolare, viene testata isolatamente per garantire che funzioni correttamente in condizioni e input diversi. Facciamo un esempio. Qui abbiamo una semplice calcolatrice per addizioni, sottrazioni, moltiplicazioni e divisioni di 2 numeri interi.

public class MyMath {

   public static int add (int a, int b) {
       return a + b;
   }

   public static int sub (int a, int b) {
       return a - b;
   }

   public static int mult (int a, int b) {
       return a*b;
   }

   public static double div (int a, int b) {
       return a/b;
   }
}
Naturalmente, ci sono molte domande su questa implementazione (ad esempio, cosa succede se aggiungiamo l'int più grande a un altro numero), ma per ora lasceremo questa implementazione così com'è. Ora scriviamo una classe in cui testeremo i metodi della classe myMath con l'aiuto degli unit test. È vero, solo due di loro. In effetti, è possibile scrivere test per verificare la validità degli argomenti, se un metodo gestisce casi speciali e così via. Ma qui ci limiteremo solo ad un paio di prove a scopo dimostrativo.

import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class MyMathTesting {
   @Test
   public void testAdd() {
       MyMath calculator = new MyMath();
       int sum = calculator.add(2, 3);
       assertEquals(5, sum);
   }

   @Test
   public void testSub() {
       MyMath calculator = new MyMath();
       int sub = calculator.sub(5, 2);
       assertEquals(3, sub);
   }

}
Il metodo assertEquals è un'asserzione che controlla se due valori sono uguali. Se i valori non sono uguali, verrà lanciato un AssertionError , indicando che il test è fallito. L'uso delle asserzioni negli unit test può aiutarti a individuare bug e garantire che il tuo codice funzioni correttamente in condizioni e input diversi. Prova ad aggiungere tu stesso tali test per la divisione e la moltiplicazione. Non è difficile.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION