Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Previous revision
courses:b0b36pjv:tutorials:07:testovani [2018/02/06 08:43]
courses:b0b36pjv:tutorials:07:testovani [2024/04/08 15:24]
mudromar [Expected exception]
Line 1: Line 1:
 +===== Testování =====
 +
 +
 +<note important>​
 +Níže uvedený text popisuje syntaxi **JUnit 4**. V současné době se běžně používá **JUnit 5**. Jeho použití a rozdíly oproti JUnit 4 popisuje [[https://​howtodoinjava.com/​junit5/​junit-5-vs-junit-4|tato stránka]].
 +</​note>​
 +
 +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''​.
 +
 +==== Vytvoření testovací třídy a metod ====
 +Minimální testovací třída může vypadat následovně:​
 +<code java>
 +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);
 +    }
 +}
 +</​code>​
 +
 +Vyzkoušejte si, co se stane, když funkce add bude vracet jiný než očekávaný výsledek.
 +
 +==== Assert ====
 +Porovnávacích ​ funkcí je spousta (viz javadoc):
 +  * ''​assertTrue''​
 +  * ''​assertFalse''​
 +  * ''​assertEquals''​
 +  * ''​assertArrayEquals''​
 +  * ''​assertNull''​
 +  * ''​assertNotNull''​
 +  * ''​assertSame''​
 +  * ''​assertNotSame''​
 +
 +==== Expected exception ====
 +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:
 +<code java> ​   ​
 +@Test(expected = ArithmeticException.class)
 +public void testDivisionByZero() {
 +    new Calculator().divide(5,​ 0);
 +}
 +</​code>​
 +
 +Pro JUnit5:
 +
 +<code java>
 +Exception exception = assertThrows(ArithmeticException.class,​ () -> new Calculator().divide(5,​0));​
 +</​code>​
 +
 +
 +==== Timeout ====
 +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).
 +
 +==== Další anotace ====
 +Pokud testujete složitější třídu, kde je potřeba inicializovat data před testy, lze použít metody s anotacemi:
 +  * ''​@Before'',​ ''​@After''​ - spustí se před a po každém testu (metodě s anotací ''​@Test''​)
 +  * ''​@BeforeClass'',​ ''​@AfterClass''​ - spustí se před prvním a po posledním testu
 +Dále existuje anotace:
 +  * ''​@Ignore''​ - lze zapsat před ''​@Test''​ a tím tento test vypustit (vhodné např. když daná testovaná část programu není aktuálně v provozuschopném stavu)
 +
 +==== Poznámky ====
 +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.
 +
  
courses/b0b36pjv/tutorials/07/testovani.txt · Last modified: 2024/04/08 15:24 by mudromar