Warning
This page is located in archive.

DÚ J1 - Testování v JUnit

Za úkol máte napsat takové testovací metody (unit testy), které odhalí, jestli je daná implementace programu správně nebo obsahuje chyby (nesplňuje vlastnosti, které by měla). Jednotlivé (chybné) implementace k dispozici nemáte, dodané třídy jsou prázdné a jsou vytvořené pouze pro to, aby Vám IDE nehlásilo chyby.

Odevzdávejte pouze soubory:
  • BooleanLibTest.java
  • HeapTest.java

Šablonu k úloze si stáhněte zde.

V dodaných šablonách na testy testujte na instančních proměnných lib pro BooleanLibTest a heap pro HeapTest. V praxi testy vypadají malinko jinak (testovací třída nemá konstruktor).

První část úkolu bude napsat obsahy dodaných testovacích metod. V druhé části pak budete testovat správnost implementací haldy bez dodaných metod. Bude tedy na Vás, zjistit, co potřebujete testovat, a jak to budete testovat.

V testech používejte assert metody z novějšího balíčku org.junit, nikoliv ze staršího junit.framework.

BooleanLib

Máte k dispozici 4 testované třídy, které implementují rozhraní BooleanLib. Do jejich implementací přístup nemáte, a tak je můžete testovat jen zvnějšku pomocí funkcí definovaných v rozhraní.

V souboru BooleanLibTest.java je unit testová třída, která má za úkol otestovat postupně všechny implementace knihovny BooleanLib. Konstrukci této třídy neměňte, jinak byste nebyli správně ohodnoceni! Jediné, co musíte, je vyplnit obsahy testovacích metod tak, aby testovali správně to, co mají v popisu (každá testuje jednu knihovní funkci). Odevzdávejte jen tento soubor - BooleanLibTest.java.

Výsledky se zobrazují ve formě správné/špatné klasifikace chyby ve funkci. Použita je terminologie True/False Positive/Negative (viz wikipedia). Positive v našem případě znamená výskyt chyby. Cílem je mít správně klasifikované funkce pro všechny testované třídy (ve sloupečku TRUE číslo 4).

Heap

Zde máte k dispozici 8 testovaných tříd, které implementují rozhraní BinaryMinHeap. Opět nemáte k dispozici jejich implementace, ale jen definované funkce rozhraní. V souboru HeapTest.java je unit testová třída která má za úkol testovat postupně všechny implementace Heapy. Konstrukci opět neměňte, ale můžete přidávat (měli byste) Vámi zvolené množství unit testových metod (anotace @Test), které celkem dokáží pokrýt všechny chyby, které se v testovaných třídách (A-G) vyskytují.

Čím dedikovanější jednotlivé metody budou, tím lepší dostanete přehled z výsledků testování. V nich se porovnávájí Vaše metody proti vlastnostem heapy (ty jsou pouze číslovány). Jaké vlastnosti testovat si musíte určit sami, ale jednotlivé implementace musí splnit rozhraní BinaryMinHeap, kde se můžete inspirovat. Křížek označuje, že daná metoda pokrývá (je schopna najít) chyby v dané vlastnosti. Cílem je mít pokryté chyby ve všech vlastnostech. Ale pozor, nesmíte naopak chybně klasifikovat vlastnost, která funguje správně (False Negative).

  • Pořadí provádění jednotlivých testů není specifikováno. Pokud potřebujete automaticky provádět nějakou operaci před/po každém testu, zvažte použití anotací @Before a @After.
  • Zkuste nejdříve začít jednodušší úlohou a vytvoře testy pro třídu BooleanLib.
  • Pokud vaše testy vyhodí výjimku, pro testovací framework se to projeví jako selhaný test. Pozor na to, abyste výjimku takto nepřehlédli.
  • Hláška “Wrong number of tested classes! Should be exactly 8 classes” vyskočí i v případě, že nemáte žádnou testovací metodu - metodu s anotací @Test (prakticky pokud odevzdáte nezměněnou šablonu HeapTest.java), tak se nelekejte a začněte ty testovací metody vytvářet.
  • Stejná hláška ale vyskočí i v případě, že máte nějakou testovací metodu, která má parametry. (Tuto chybu však lze detekovat, pokud si to zkusíte spustit v IDE dříve, než to nahrajete do US.)
Jelikož není definováno pořadí spouštění testovacích metod a nemáte přístup ke konstruktorům jednotlivých tříd (abyste dostali čistou haldu), metody clear() a isEmpty() jsou vždy implementovány správně. Metoda clear() prakticky volá konstruktor, takže máte haldu ve stejném stavu jako na začátku.

Po provedení heap.clear() by měla funkce isEmpty() vždy vracet true (nezávisle na tom, jak špatně je daná knihovna implementovaná).

(to je ale tak jediné, čím si můžete být jisti…)

courses/a0b36pr2/hw/hw-j1.txt · Last modified: 2016/04/18 11:05 by mrvajaku