Abstract
Cílem této úlohy je naučit se vytvářet testovací třídy pro JUnit.
Table of Contents
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.
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í.
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í.