Unit-tests met JUnit

Introductie tot testen in Java

Maria Milusheva

Senior Software Engineer

Unit-testen — definitie

Twee kernbegrippen:

Unit - het kleinste testbare deel van een applicatie, zoals een methode

Unit-test - een test die de correctheid van één “unit” code verifieert, los van de rest van de applicatie

Introductie tot testen in Java

Unit-testen gaat om details

Notities:

  • Unit-testen gaat over kleine stukjes logica, niet het grote geheel

  • Andere testtypes focussen op het grote geheel (bijv. integratie)

  • JUnit heet zo omdat het primair voor unit-tests is

Een grafiek die intuïtief de relatie tussen unit-tests en productcode toont

Introductie tot testen in Java

Testtypen — kort overzicht

  • In deze course bespreken we vooral unit- en integratietests
  • Maar er zijn veel testtypes!

Diagram van softwaretests, inclusief functionele tests zoals unit-tests en niet-functionele tests zoals usability-tests

Introductie tot testen in Java

Testtypen — kort overzicht

  • In deze course bespreken we vooral unit- en integratietests
  • Maar er zijn veel testtypes!

Diagram van softwaretests, inclusief functionele tests zoals unit-tests en niet-functionele tests zoals usability-tests. In deze versie zijn unit- en integratietests omcirkeld

Introductie tot testen in Java

JUnit-syntaxis: assertTrue() en assertFalse()

  • assertTrue() controleert dat een bewering waar is:
List<String> list = new ArrayList<>();

assertTrue(list.isEmpty()); // Geen fout
  • assertFalse() controleert het omgekeerde:
List<String> list = new ArrayList<>();
list.add("A");

assertFalse(list.isEmpty()); // Geen fout
Introductie tot testen in Java

assertNull() en assertNotNull()

null-variabelen kunnen tot NullPointerException leiden!

  • Assertions die checken of een variabele wel of niet null is: assertNull() en assertNotNull()

  • Veelvoorkomend: controleren dat een opgehaalde waarde niet null is

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

catalogue.put("item1", 10);

// Geen fouten
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
Introductie tot testen in Java

Exceptions asserten

Stel, we willen verifiëren dat een ArrayIndexOutOfBoundsException wordt gegooid:

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

JUnit biedt meerdere manieren om dit te doen!

Introductie tot testen in Java

assertInstanceOf()

  • JUnit heeft assertThrows(), maar dat gebruikt geavanceerde Java-syntaxis (lambda’s)

  • Je kunt assertInstanceOf() zo gebruiken:

try {
    getIndex(new String[]{}, 4);
} catch (Exception e) {
    // Geef de verwachte klasse van de exception en de exception zelf door  
    assertInstanceOf(ArrayIndexOutOfBoundsException.class, e); 
}
1 https://www.baeldung.com/junit-assert-exception
Introductie tot testen in Java

Unit-tests benoemen

  • Een typisch project bevat honderden unit-tests

  • Ze moeten lichtgewicht en makkelijk te begrijpen zijn

  • Geef ze informatieve namen, zodat je direct ziet wat er misging bij een mislukte test

Bijv.: methodUnderTest_expectedBehavior_conditions()

1 https://dzone.com/articles/7-popular-unit-test-naming?fromrel=true
Introductie tot testen in Java

Laten we oefenen!

Introductie tot testen in Java

Preparing Video For Download...