Unit testing cu JUnit

Introducere în testarea în Java

Maria Milusheva

Senior Software Engineer

Testarea unitară - definiție

Două concepte cheie:

Unitate - cea mai mică parte testabilă a unei aplicații, de exemplu o metodă

Testare unitară - un test care verifică corectitudinea unei singure „unități" de cod, în izolare față de restul aplicației

Introducere în testarea în Java

Testarea unitară vizează detaliile

Note:

  • Testarea unitară vizează fragmente mici de logică, nu imaginea de ansamblu

  • Alte tipuri de testare vizează imaginea de ansamblu (ex. testarea de integrare)

  • JUnit își primește numele de la principalul său caz de utilizare: testarea unitară

Grafic ilustrând intuitiv relația dintre testele unitare și codul de producție

Introducere în testarea în Java

Tipuri de testare - prezentare generală

  • În acest curs vom discuta în principal despre testele unitare și de integrare
  • Există însă multe tipuri de testare!

Diagramă a testelor software, incluzând testare funcțională (ex. testare unitară) și testare nefuncțională (ex. testare de utilizabilitate)

Introducere în testarea în Java

Tipuri de testare - prezentare generală

  • În acest curs vom discuta în principal despre testele unitare și de integrare
  • Există însă multe tipuri de testare!

Diagramă a testelor software, incluzând testare funcțională (ex. testare unitară) și testare nefuncțională (ex. testare de utilizabilitate). Această versiune evidențiază testarea unitară și de integrare

Introducere în testarea în Java

Sintaxă JUnit: assertTrue() și assertFalse()

  • assertTrue() verifică dacă o condiție este adevărată:
List<String> list = new ArrayList<>();

assertTrue(list.isEmpty()); // No error
  • assertFalse() verifică opusul:
List<String> list = new ArrayList<>();
list.add("A");

assertFalse(list.isEmpty()); // No error
Introducere în testarea în Java

assertNull() și assertNotNull()

Variabilele null pot genera NullPointerException!

  • Aserțiuni pentru verificarea valorilor null - assertNull() și assertNotNull()

  • Caz frecvent: verificarea că o valoare recuperată nu este null

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

catalogue.put("item1", 10);

// No errors
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
Introducere în testarea în Java

Verificarea excepțiilor

Să presupunem că vrem să verificăm dacă se aruncă un ArrayIndexOutOfBoundsException:

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

JUnit oferă mai multe modalități de a face acest lucru!

Introducere în testarea în Java

assertInstanceOf()

  • JUnit oferă assertThrows(), dar aceasta folosește sintaxă Java avansată (expresii lambda)

  • Se poate folosi assertInstanceOf() astfel:

try {
    getIndex(new String[]{}, 4);
} catch (Exception e) {
    // Pass the expected class of the exception and the exception itself  
    assertInstanceOf(ArrayIndexOutOfBoundsException.class, e); 
}
1 https://www.baeldung.com/junit-assert-exception
Introducere în testarea în Java

Denumirea testelor unitare

  • Un proiect tipic conține sute de teste unitare

  • Acestea trebuie să fie ușoare și ușor de înțeles

  • Trebuie să aibă nume descriptive, pentru a identifica rapid problema în caz de eșec

De exemplu: methodUnderTest_expectedBehavior_conditions()

1 https://dzone.com/articles/7-popular-unit-test-naming?fromrel=true
Introducere în testarea în Java

Să exersăm!

Introducere în testarea în Java

Preparing Video For Download...