Unit testování s JUnit

Úvod do testování v Javě

Maria Milusheva

Senior Software Engineer

Unit testování – definice

Dva klíčové pojmy:

Unit – nejmenší testovatelná část aplikace, například metoda

Unit testování – test zaměřený na ověření správnosti jedné „jednotky" kódu izolovaně od ostatních částí aplikace

Úvod do testování v Javě

Unit testování se zaměřuje na detaily

Poznámky:

  • Unit testování se týká dílčích částí logiky, nikoli celku

  • Jiné typy testování se zaměřují na celek (např. integrační testování)

  • JUnit nese název podle svého primárního využití – unit testování

Grafické znázornění vztahu mezi unit testy a produkčním kódem

Úvod do testování v Javě

Typy testování – stručný přehled

  • V tomto kurzu se zaměříme především na unit a integrační testy
  • Existuje však mnoho typů testování!

Diagram typů softwarového testování zahrnující funkcionální testování (např. unit testování) a nefunkcionální testování (např. testování použitelnosti)

Úvod do testování v Javě

Typy testování – stručný přehled

  • V tomto kurzu se zaměříme především na unit a integrační testy
  • Existuje však mnoho typů testování!

Diagram typů softwarového testování zahrnující funkcionální testování (např. unit testování) a nefunkcionální testování (např. testování použitelnosti). Tato verze zvýrazňuje unit a integrační testování

Úvod do testování v Javě

Syntaxe JUnit: assertTrue() a assertFalse()

  • assertTrue() ověřuje, že výraz je pravdivý:
List<String> list = new ArrayList<>();

assertTrue(list.isEmpty()); // No error
  • assertFalse() ověřuje opak:
List<String> list = new ArrayList<>();
list.add("A");

assertFalse(list.isEmpty()); // No error
Úvod do testování v Javě

assertNull() a assertNotNull()

Proměnné s hodnotou null mohou způsobit NullPointerException!

  • Metody assertNull() a assertNotNull() ověřují, zda je proměnná null nebo není

  • Typické použití: ověření, že načtená hodnota není null

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

catalogue.put("item1", 10);

// No errors
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
Úvod do testování v Javě

Testování výjimek

Předpokládejme, že chceme ověřit, zda je vyvolána výjimka ArrayIndexOutOfBoundsException:

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

JUnit nabízí více způsobů, jak to provést!

Úvod do testování v Javě

assertInstanceOf()

  • JUnit poskytuje assertThrows(), ale využívá pokročilou syntaxi Javy (lambda výrazy)

  • Lze použít assertInstanceOf() takto:

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
Úvod do testování v Javě

Pojmenování unit testů

  • Typický projekt obsahuje stovky unit testů

  • Měly by být jednoduché a snadno srozumitelné

  • Měly by mít výstižné názvy, aby bylo na první pohled zřejmé, co selhalo

Například: methodUnderTest_expectedBehavior_conditions()

1 https://dzone.com/articles/7-popular-unit-test-naming?fromrel=true
Úvod do testování v Javě

Pojďme procvičovat!

Úvod do testování v Javě

Preparing Video For Download...