Introduzione al Testing in Java
Maria Milusheva
Senior Software Engineer
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
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



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
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"));
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!
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);
}
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()
Introduzione al Testing in Java