CourseWare Wiki
Switch Term
Summer 2023 / 2024
Summer 2022 / 2023
Summer 2021 / 2022
Summer 2020 / 2021
Summer 2019 / 2020
Summer 2018 / 2019
Summer 2017 / 2018
Older
Search
Log In
b232
courses
b0b36pjv
tutorials
07
testovani
Differences
This shows you the differences between two versions of the page.
View differences:
Side by Side
Inline
Go
Link to this comparison view
Both sides previous revision
Previous revision
2024/04/08 15:24 mudromar [Expected exception]
2024/04/03 17:00 mudromar [Expected exception]
2024/04/03 16:59 mudromar
2021/03/27 19:43 external edit
Go
Previous revision
2024/04/08 15:24 mudromar [Expected exception]
2024/04/03 17:00 mudromar [Expected exception]
2024/04/03 16:59 mudromar
2021/03/27 19:43 external edit
Go
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