Test unitari con JUnit

Introduzione al Testing in Java

Maria Milusheva

Senior Software Engineer

Unit testing - definizione

Due concetti chiave:

Unit - la più piccola parte testabile di un'applicazione, ad es. un metodo

Unit testing - Test che verifica la correttezza di una singola "unit" di codice isolata dal resto dell'applicazione

Introduzione al Testing in Java

Il unit testing è sui dettagli

Note:

  • Il unit testing riguarda piccole porzioni di logica, non la visione d'insieme

  • Altri tipi di test guardano al quadro generale (es. integrazione)

  • JUnit si chiama così perché il suo caso d'uso principale è il unit testing

Un grafico che illustra il rapporto tra test unitari e codice di produzione

Introduzione al Testing in Java

Tipi di test - panoramica rapida

  • In questo corso parleremo soprattutto di test unit e integration
  • Ma esistono molti tipi di test!

Diagramma dei test software: funzionali (come unit) e non funzionali (come usabilità)

Introduzione al Testing in Java

Tipi di test - panoramica rapida

  • In questo corso parleremo soprattutto di test unit e integration
  • Ma esistono molti tipi di test!

Diagramma dei test software: funzionali (come unit) e non funzionali (come usabilità). In questa versione unit e integration sono cerchiati

Introduzione al Testing in Java

Sintassi JUnit: assertTrue() e assertFalse()

  • assertTrue() verifica che un'espressione sia vera:
List<String> list = new ArrayList<>();

assertTrue(list.isEmpty()); // Nessun errore
  • assertFalse() verifica il contrario:
List<String> list = new ArrayList<>();
list.add("A");

assertFalse(list.isEmpty()); // Nessun errore
Introduzione al Testing in Java

assertNull() e assertNotNull()

Le variabili null possono causare NullPointerException!

  • Asserzioni per verificare se una variabile è o non è null: assertNull() e assertNotNull()

  • Caso comune: controllare che un valore recuperato non sia null

Map<String, Integer> catalogue = new HashMap<>();

catalogue.put("item1", 10);

// Nessun errore
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
Introduzione al Testing in Java

Asserire eccezioni

Supponiamo di voler verificare che venga lanciata un'ArrayIndexOutOfBoundsException:

public String getIndex(String[] array, int index) {
    return array[index];
}

JUnit offre più modi per farlo!

Introduzione al Testing in Java

assertInstanceOf()

  • JUnit fornisce assertThrows(), ma usa sintassi Java avanzata (lambda)

  • Puoi usare assertInstanceOf() così:

try {
    getIndex(new String[]{}, 4);
} catch (Exception e) {
    // Passa la classe attesa dell'eccezione e l'eccezione stessa  
    assertInstanceOf(ArrayIndexOutOfBoundsException.class, e); 
}
1 https://www.baeldung.com/junit-assert-exception
Introduzione al Testing in Java

Nominare i test unitari

  • Un progetto tipico contiene centinaia di test unitari

  • Devono essere leggeri e facili da capire

  • Devono avere nomi informativi, così capiamo subito cosa è andato storto se uno fallisce

Per esempio: methodUnderTest_expectedBehavior_conditions()

1 https://dzone.com/articles/7-popular-unit-test-naming?fromrel=true
Introduzione al Testing in Java

Vamos praticar!

Introduzione al Testing in Java

Preparing Video For Download...