Úloha číslo 5

Testování a JUnit

Petr Adámek

Abstract

Cílem této úlohy je naučit se vytvářet testovací třídy pro JUnit.


Table of Contents

Co je potřeba znát
Zadání
Několik rad
Odevzdání úlohy

Co je potřeba znát

Pro vyřešení této úlohy je třeba

  • Rozumět principům objektového programování v jazyce Java.

  • Umět vytvářet testovací třídy pro JUnit.

Zadání

V této úloze bude Vaším úkolem vytvořit testovací třídu PersonTest, která otestuje třídu Person.

K dispozici máte testovací třídu PersonTestTest, která otestuje zdali jste ve Vaší testovací třídě na něco nezapomněli. Testování probíhá tak, že jsou Vaší testovací třídě postupně podstrkávány různé chybné verze třídy Person a zkouší se, zdali Vaše testovací třída všechny chyby odhalí.

Několik rad

  • U metody getAge() je nutné otestovat především hraniční hodnoty (tj. okamžik těsně před změnou věku a okamžik těsně po změně věku). Jde o typický případ situace, kdy se chování metody mění v nějakém bodě, a proto je nutné ji správně otestovat tak, že vyzkoušíme především hraniční hodnoty u tohoto bodu. Správně by bylo dobré ještě otestovat např. přestupné roky nebo rozhraní mezi letním a zimním časem, ale to již přesahuje rámec zadání této úlohy.

  • Pro práci s datem slouží třída Calendar (viz http://java.sun.com/j2se/1.5.0/docs/api/java/util/Calendar.html). Pokud byste tuto třídu používali v jiné aplikaci, dávejte si pozor, že na její chování má vliv nastavení časové zóny (TimeZone) a lokalizace (Locale).

  • Inspiraci raději moc nečerpejte v testovacích třídách k domácím úlohám nebo písemkám. Tyto testovací třídy jsou zbytečně složité, protože se snaží odhalit mnohem širší okruh problémů, než bývá obvykle potřeba. V běžných testovacích třídách se velmi jednoduché metody obvykle netestují, rozhodně se nekontrolují věci jako je dodržení konvencí pro pojmenování metod nebo atributů či přístupová práva a většinou se u jednotlivých testovacích podmínek ani neuvádí případná chybová hláška. Taktéž se nezachytávají a nekometují výjimky (týká se např. osmé úlohy).

  • Abychom při psaní testoavcích tříd neztráceli zbytečně mnoho času, není nutné dodržovat všechna pravidla, která obvykle dodržujeme v produkčním kódu. Například většinou není nutné psát komentáře a také není nutné ke každému řádku s ověřením nějaké podmínky (assert...) doplňovat řetězec s chybovou hláškou.

  • Raději se ani nedívejte do třídy PersonTestTest. Takovéto třídy pro testování testovacích tříd se v praxi nikdy nepoužívají, jde o velmi specifickou věc, která Vám má pouze usnadnit vyřešení této úlohy.

Další rady a návody jak řešit některé z potenciálních problémů Vám poskytnou cvičící v příslušném cvičení.

Odevzdání úlohy

Před odevzdáním úlohy si zkontrolujte:

  1. Zda jde úloha přeložit a zda jdou přeložit i všechny testy.

  2. Zdali všechny testy projdou bez chyby.

  3. Komentáře JavaDoc u testovací třídy vyplňovat nemusíte.