Search
Máme k dispozici implementaci programu a potřebujeme ji otestovat. Aby nám testovací konstrukce nepřekážela v implementaci, je výhodné ji mít někde separátně - jako např. jUnit test class. V Mavenu se testovací třídy umisťují do složky src/test.
src/test
Minimální testovací třída může vypadat následovně:
import org.junit.*; import static org.junit.Assert.*; public class CalculatorTest { @Test public void testIt() { Calculator c = new Calculator(); int result = c.add(12, 5); assertTrue("12 + 5 should equals 17, not " + result, result == 17); } }
Vyzkoušejte si, co se stane, když funkce add bude vracet jiný než očekávaný výsledek.
Porovnávacích funkcí je spousta (viz javadoc):
assertTrue
assertFalse
assertEquals
assertArrayEquals
assertNull
assertNotNull
assertSame
assertNotSame
Testovací metoda může testovat i správné házení výjimek. Stačí do anotace metody připsat třídu očekávané výjimky. Můžete například otestovat dělení nulou zápisem:
@Test(expected = ArithmeticException.class) public void testDivisionByZero() { new Calculator().divide(5, 0); }
Lze i testovat dobu trvání metod. Například pokud dokážeme odhadnout dobu výpočtu, můžeme nastavit timeout, po jehož překročení skončí test chybou. Vhodné například pro detekci zacyklení programu. @Test(timeout = 100). V našem případě kalkulačky to může být použito například pro testování efektivity algoritmu funkce faktorial (rozdíl mezi iterativním a rekurzivním výpočtem).
@Test(timeout = 100)
Pokud testujete složitější třídu, kde je potřeba inicializovat data před testy, lze použít metody s anotacemi:
@Before
@After
@Test
@BeforeClass
@AfterClass
Dále existuje anotace:
@Ignore
Pokud je tělo testovací metody prázdné, pak test dopadne úspěšně. To znamená ale jen, že neobjevil chybu, ne že žádná chyba neexistuje. Správný test najde všechny případy, ve kterých dojde k chybě (funkce se chová jinak než se očekává) a skončí hláškou Failed; v ostatních případech (pokud je funkce bezchybná) skončí s hláškou Passed.