Co je testování jednotek?
Testování jednotek v Pythonu se provádí k identifikaci chyb v rané fázi vývoje aplikace, kdy jsou chyby méně opakující se a jejich oprava je levnější.
Test jednotky je test na úrovni skriptovaného kódu navržený v Pythonu k ověření malé „jednotky“ funkčnosti. Unit test je objektově orientovaný rámec založený na testovacích zařízeních.
Techniky testování jednotek v Pythonu
Testování jednotek v Pythonu zahrnuje hlavně testování konkrétního modulu bez přístupu k jakémukoli závislému kódu. Vývojáři mohou pomocí technik, jako jsou pahýly a posměšky, oddělit kód na „jednotky“ a spustit testování na úrovni jednotlivých částí.
- Test-Driven Development TDD: Unit Testing should be done along with the Python, and for that developers use Test-Driven Development method. V metodě TDD nejprve navrhnete testy Python Unit a teprve poté budete pokračovat v psaní kódu, který bude implementovat tuto funkci.
- Stubs and Mocks: Jedná se o dvě hlavní techniky, které simulují falešné metody, které se testují. Pahýl se používá k vyplnění nějaké závislosti potřebné pro jednotku testu, aby správně fungoval. Mock na druhé straně je objekt falešný který běží testy, kde dáme assert.
Záměry obou metod jsou stejné k vyloučení testování všech závislostí třídy nebo funkce.
Rámec pro testování jednotek v Pythonu
Aby byl proces testování jednotek snazší a zlepšila se kvalita vašeho projektu, doporučuje se Python Unit Testing Framework. Rámec testování jednotek zahrnuje
- PyUnit: PyUnit podporuje příslušenství, testovací případy, testovací sady a testovací běžec pro automatické testování kódu. V PyUnit můžete organizovat testovací případy do sad se stejnými zařízeními
- Nose: Nose's built in plug-ins helps you with output capture, code coverage, doctests, atd. Syntaxe Nose je docela jednodušší a snižuje překážky při psaní testů. Rozšiřuje Python unittest, aby usnadnil testování.
- Doctest: Testovací skript Doctest jde do docstringu s malou funkcí v dolní části souboru. Doctest umožňuje otestovat váš kód spuštěním příkladů obsažených v dokumentaci a ověřením, že vrátily očekávané výsledky. Případ použití doctest je méně podrobný a nezachycujte speciální případy. Jsou užitečné jako expresivní dokumentace hlavního případu použití modulu a jeho komponent.
Testování jednotek pomocí PyUnit
Pyunit je pythonovský port JUnit. Součástí Pyunitu je v modulu unittest pět klíčových tříd.
- Třída TestCase : Třída TestCase nese testovací rutiny a poskytuje háčky pro provedení každé rutiny a následné čištění
- Třída TestSuite : Zajišťuje se jako sběrný kontejner a může mít více objektů testcase a více objektů testsuites
- Třída TestLoader : Tato třída načte testovací případy a sady definované lokálně nebo z externího souboru. Vysílá objekty testsuite, které tyto sady a případy obsahují
- Třída TextTestRunner : Pro spuštění testů zajišťuje standardní platformu pro provádění testů
- Třída TestResults : Nabízí standardní kontejner pro výsledky testu
Návrh testovacího případu pro testování v Pythonu pomocí PyUnit
Test jednotky poskytuje základní třídu, testovací případ, který lze použít k vytvoření nových testovacích případů. Pro návrh testovacího případu existují tři sady použitých metod
unittest.TestCase
setUp()teardown()skipTest(aMesg:string)fail(aMesg:string)id():stringshortDescription():string
V první sadě jsou háčky před a po zkoušce. Metoda setup () začíná před každou testovací rutinou, teardown () po rutině.
Druhá sada metody řídí provádění testu. Obě metody berou jako vstup řetězec zprávy a obě zruší probíhající test. Metoda skiptest () ale přeruší aktuální test, zatímco metoda fail () jej zcela selže.
Poslední nebo třetí metoda pomáhá určit test. Metoda id () vrací řetězec skládající se z názvu objektu testcase a testovací rutiny. A metoda shortDescription () vrací komentář docstr při zahájení každé testovací rutiny.
Výhody použití testování jednotky Python
- Pomůže vám odhalit chyby na začátku vývojového cyklu
- Pomůže vám psát lepší programy
- Snadno se synchronizuje s dalšími testovacími metodami a nástroji
- Bude mít mnohem méně chyb
- V budoucnu je snazší úpravy s velmi malými důsledky