Výukový program PyUnit: Python Unit Testing Framework (s příkladem)

⚡ Chytré shrnutí

Python Jednotkové testování kontroluje malé jednotky vašeho kódu izolovaně, aby včas odhalilo chyby. Zde se naučíte techniky jednotkového testování, framework PyUnit (unittest), jeho klíčové třídy, jak navrhnout testovací případ a funkční příklad.

  • 🧪 Co to je: Jednotkové testování ověřuje malé, izolované jednotky kódu, aby včas odhalilo chyby.
  • 🔬 Techniky: TDD, stuby a mocky izolují kód, takže jednotky se testují nezávisle.
  • 🐍 PyUnit: PythonVestavěný modul unittest (PyUnit) je portem JUnit.
  • 🧱 Klíčové třídy: TestCase, TestSuite, TestLoader, TextTestRunner a TestResults.
  • 🤖 Pomoc s umělou inteligencí: Nástroje umělé inteligence, jako je Copilot, generují testovací případy unittest okamžitě.

Python Testování jednotek

Co je Unit Testing?

Testování jednotek in Python se provádí k identifikaci chyb v rané fázi vývoje aplikace, kdy se chyby méně opakují a jejich oprava je levnější.

Unit test je skriptovaný test na úrovni kódu navržený v Python k ověření malé „jednotky“ funkčnosti. Unit test je objektově orientovaný rámec založený na testovacích přípravcích.

Python Jednotkové zkušební techniky

Python Testování jednotek zahrnuje především testování konkrétního modulu bez přístupu k libovolnému závislému kódu. Vývojáři mohou k oddělení kódu do „jednotek“ použít techniky, jako jsou útržky a simulace, a spustit testování na úrovni jednotlivých kusů.

  • Testem řízený vývoj TDD: Testování jednotky by mělo být provedeno společně s Pythona k tomu vývojáři používají metodu Test-Driven Development. V metodě TDD nejprve navrhnete Python Unit testuje a teprve potom pokračujete v psaní kódu, který bude tuto funkci implementovat.
  • Pahýly a zesměšňování: Jsou to dvě hlavní techniky, které simulují falešné metody, které se testují. A Pahýl se používá k vyplnění některých závislostí, které jsou nutné pro správný běh unit testu. A Falešný na druhé straně je falešný objekt, který spouští testy, kam vkládáme claim.

    Záměry obou metod jsou stejné, aby se eliminovalo testování všech závislostí třídy nebo funkce.

Python Unit Testing Framework

Pro usnadnění procesu Unit Testing a zlepšení kvality vašeho projektu se doporučuje Python Unit Testing Framework. Rámec Unit Testing zahrnuje

Python Jednotkové zkušební techniky

  • PyUnit: PyUnit podporuje přípravky, testovací případy, testovací sady a testovací běh pro automatické testování kódu. V PyUnit můžete organizovat testovací případy do sad se stejným příslušenstvím
  • Nos: Vestavěné zásuvné moduly Nose vám pomohou se zachycením výstupu, pokrytím kódu, doctesty atd. Syntaxe Nose je mnohem jednodušší a snižuje překážky při psaní testů. Prodlužuje se Python unittest pro usnadnění testování.
  • Doctest: Testovací skript Doctest jde v docstring s malou funkcí v dolní části souboru. Doctest vám umožňuje otestovat váš kód spuštěním příkladů zahrnutých v dokumentaci a ověřením, že vrátily očekávané výsledky. Případ použití doctestu je méně podrobný a nezachycuje 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 a Python port of JUnit. Jako součást Pyunit je v modulu unittest pět klíčových tříd.

Testování jednotek pomocí PyUnit

  • Třída TestCase: Třída TestCase nese testovací rutiny a poskytuje háčky pro vytvoření každé rutiny a následné čištění
  • Třída TestSuite: Slouží jako sběrný kontejner a může vlastnit více objektů testovacího případu a více objektů testovacích sad
  • Třída TestLoader: Tato třída načte testovací případy a sady definované lokálně nebo z externího souboru. Vysílá objekty testovací soupravy, které vlastní tyto soupravy a případy
  • Třída TextTestRunner: Pro spouštění testů zajišťuje standardní platformu pro provádění testů
  • Třída TestResults: Nabízí standardní nádobu pro výsledky testu

Navrhování testovacího případu pro Python Testování pomocí PyUnit

Unit test 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 se používají tři sady metod

Navrhování testovacího případu pro Python

unittest.TestCase

setUp()
teardown()

skipTest(aMesg:string)
fail(aMesg:string)

id():string
shortDescription():string

V první sadě jsou před a po testovací háčky. Metoda setup() začíná před každou testovací rutinou, teardown() po rutině.

Druhá sada metod řídí provádění testu. Obě metody berou jako vstup řetězec zprávy a obě ruší probíhající test. Ale metoda skiptest() přeruší aktuální test, zatímco metoda fail() jej úplně selže.

Poslední nebo třetí metoda pomáhá určit test. Metoda id() vrací řetězec sestávající z názvu objektu testcase a testovací rutiny. A metoda krátkáDescription() vrací komentář docstr při zahájení každé testovací rutiny.

Python Příklad jednotkového testu

Následující příklad testuje jednoduchou funkci add() s modulem unittest. Každá metoda s prefixem test_ se spustí automaticky a assertEqual porovnává výsledek s očekávanou hodnotou.

import unittest

def add(a, b):
    return a + b

class TestAdd(unittest.TestCase):
    def test_add_positive(self):
        self.assertEqual(add(2, 3), 5)

    def test_add_negative(self):
        self.assertEqual(add(-1, -1), -2)

if __name__ == "__main__":
    unittest.main()

Uložte kód a spusťte ho pomocí příkazu python filename.py. Běžec unittest hlásí, kolik testů proběhlo úspěšně nebo neúspěšně.

Výhody použití Python Testování jednotek

  • Pomůže vám to odhalit chyby na začátku vývojového cyklu
  • Pomáhá vám psát lepší programy
  • Snadno se synchronizuje s jinými testovacími metodami a nástroji
  • Bude mít mnohem méně chyb
  • Je snazší v budoucnu upravit s velmi menšími následky

Nejčastější dotazy

Jednotkové testování ověřuje malou jednotku kódu, například funkci, izolovaně. Odhaluje chyby v rané fázi vývoje, kdy jsou levnější a snadněji opravitelné.

PyUnit je PythonVestavěný framework pro jednotkové testování, dostupný jako modul unittest. Jedná se o port JUnit a podporuje přípravky, testovací případy, sady a běžce testů.

Vytvořte podtřídu unittest.TestCase, napište metody začínající test_ a uvnitř nich použijte aserce jako assertEqual. Spusťte soubor s unittest.main() pro spuštění všech testů.

Funkce setUp() se spouští před každou testovací metodou pro přípravu fixtures, zatímco funkce tearDown() se spouští po každém testu pro vyčištění. Společně zajišťují nezávislost a opakovatelnost testů.

Stuby poskytují fixní data, na kterých test závisí, zatímco mocky jsou falešné objekty, proti kterým se assertuje. Oba nahrazují skutečné závislosti, takže jednotka je testována izolovaně.

Asistenti umělé inteligence, jako je GitHub Copilot, generují testovací případy unittest z funkce, navrhují okrajové případy a aserce a vytvářejí simulace závislostí během psaní kódu.

Ano. Nástroje založené na umělé inteligenci dokáží automatizovat generování testovacích sad, vytvářet aserce pro očekávané výstupy a zvyšovat pokrytí kódu navrhováním testů pro netestované větve.

jednotkový test je Pythonvestavěný framework používající třídy a metody assert, zatímco pytest je knihovna třetí strany s jednoduššími příkazy assert a výkonnými přípravky. Oba spouštějí jednotkové testy.

Shrňte tento příspěvek takto: