- Jedná se o nedílnou součást vývoje jakéhokoliv SW
- Některé typy testů je možné automatizovat
- Budeme se bavit o tzv. unit testech (jednotkové testy)
- = každý testuje právě jednu věc
- Testování probíhá následujícím způsobem
- předáme vstup
- očekáváme daný výstup
- pokud výstup neodpovídá vstupu, test selže
test driven developement … nejdříve napíšeme testy potom až kód
- V Pythonu máme k dispozici nativní možnost unit testů, avšak rozšířenější formou je balíček
pytest
Balíček pytest
- Spuštěním příkazu
pytest
spustíme test
Organizace testů
- Především jde o strukturu v adresáři
setup.py
mypkg/
__init__.py
app.py
view.py
tests/
test_app.py
test_view.py
...
- V případě větší možné kombinace vstupů a výstupů je vhodné použít dekorátor
@pytest.mark.parametrize
(test je parametrizovaný)
Fixtures
- Vidíme, že je nutné pro každý test vytvořit novou instanci třídy
- Použití tohoto dekorátoru nám zaručí, že se data pro každý test vytvoří znovu
Testování výjimek
Testování v rámci docstringů
- Elegantní testy pro jednoduché funkce
- Příklady se rovněž zobrazí v nápovědě k funkci
- Poté stačí přidat argument
--doctest-modules
při spuštění pytest
Code coverage
- Jedná se o procentuální pokrytí testů, neboli jaké procento zdrojového kódu je testováno
- V ideálním případě je dobré docílit 100% pokrytí, v praxi jsou však hodnoty nad 90% dostatečné
Jak počítat?
- V kombinaci s knihovnou
pytest
lze nainstalovat knihovnu coverage
, která code coverage vypočítá
- Dále můžeme code coverage spočítat příkazem
coverage run -m pytest
(případně musíme dodat další argumenty jako --doctest-modules
)