PyUnit oktatóanyag: Python Egységtesztelési keretrendszer (példával)

⚡ Okos összefoglaló

Python Az egységtesztelés a kódod kis egységeit ellenőrzi elszigetelten, hogy a hibákat korán felfedezze. Itt megismerkedhetsz az egységtesztelési technikákkal, a PyUnit (unittest) keretrendszerrel, annak kulcsosztályaival, a tesztesetek tervezésével és egy működő példával.

  • 🧪 Ami: Az egységtesztelés kis, elszigetelt kódrészleteket ellenőriz a hibák korai felismerése érdekében.
  • 🔬 technikák: A TDD, a csonkok és a mockok elkülönítik a kódot, így az egységek egymástól függetlenül tesztelhetők.
  • 🐍 PyUnit: PythonA beépített unittest modulja (PyUnit) a következő portja: JUnit.
  • 🧱 Kulcsosztályok: TestCase, TestSuite, TestLoader, TextTestRunner és TestResults.
  • 🤖 MI segítség: Az olyan mesterséges intelligencia eszközök, mint a Copilot, azonnal generálnak unittest teszteseteket.

Python Egység tesztelése

Mi az az egységteszt?

Egység tesztelése in Python célja a hibák azonosítása az alkalmazás fejlesztési szakaszának korai szakaszában, amikor a hibák kevésbé visszatérőek és olcsóbb a javításuk.

Az egységteszt egy szkriptes kódszintű teszt, amelyet ben terveztek Python a funkcionalitás egy kis „egységének” ellenőrzésére. Az egységteszt egy objektumorientált keretrendszer, amely teszteszközökön alapul.

Python Egységvizsgálati technikák

Python Az egységtesztelés főként egy adott modul tesztelését jelenti függő kód elérése nélkül. A fejlesztők olyan technikákat használhatnak, mint a csonkok és gúnyok, hogy a kódot „egységekre” bontsák, és egységszintű tesztelést hajtsanak végre az egyes darabokon.

  • Tesztvezérelt fejlesztési TDD: Az egységtesztet a Python, és ehhez a fejlesztők a tesztvezérelt fejlesztési módszert használják. A TDD módszerben először meg kell tervezni Python Az egységtesztek, és csak ezután folytathatja a funkciót megvalósító kód írását.
  • Csonkok és gúnyok: Ez két fő technika, amelyek a tesztelés alatt álló hamis módszereket szimulálják. A tuskó az egységteszt megfelelő futtatásához szükséges függőségek kitöltésére szolgál. A utánzott másrészt egy hamis objektum, amely lefuttatja a teszteket, ahol az assert-et helyezzük el.

    Mindkét módszer célja ugyanaz, hogy kiküszöböljük egy osztály vagy függvény összes függőségének tesztelését.

Python Unit Testing Framework

Az egységtesztelési folyamat megkönnyítése és a projekt minőségének javítása érdekében ajánlott a Python Unit Testing Framework. A Unit Testing keretrendszer tartalmazza

Python Egységvizsgálati technikák

  • PyUnit: A PyUnit támogatja a rögzítéseket, teszteseteket, tesztcsomagokat és egy tesztfutót a kód automatikus teszteléséhez. A PyUnitban a teszteseteket ugyanazokkal a fixtures csomagokkal rendezheti
  • Orr: A Nose beépített beépülő moduljai segítik a kimenet rögzítését, a kódlefedettséget, a docteszteket stb. A Nose szintaxisa meglehetősen egyszerű, és csökkenti a tesztírás előtti akadályokat. Meghosszabbodik Python unittest a tesztelés megkönnyítése érdekében.
  • Doctest: A Doctest tesztelési szkript a docstringben található kis funkcióval a fájl alján. A Doctest lehetővé teszi a kód tesztelését a dokumentációban található példák futtatásával és annak ellenőrzésével, hogy a várt eredményeket adták-e vissza. A doctest használati esete kevésbé részletes, és nem ragad meg különleges eseteket. Hasznosak a modul és összetevői fő használati eseteinek kifejező dokumentációjaként.

Egységtesztelés PyUnit segítségével

Pyunit egy Python kikötő JUnit. A Pyunit részeként a unittest modulban öt kulcsosztály található.

Egységtesztelés PyUnit segítségével

  • TestCase osztály: A TestCase osztály viseli a tesztrutinokat, és horgokat biztosít az egyes rutinok elvégzéséhez és az azt követő takarításhoz
  • TestSuite osztály: Gyűjtőkonténerként szolgál, és több testcase objektumot és több testsuites objektumot is tartalmazhat
  • TestLoader osztály: Ez az osztály helyileg vagy külső fájlból definiált teszteseteket és csomagokat tölt be. Testsuite objektumokat bocsát ki, amelyek birtokában vannak ezeknek a csomagoknak és toknak
  • TextTestRunner osztály: A tesztek futtatásához szabványos platformot biztosít a tesztek végrehajtásához
  • A TestResults osztály: Egy szabványos tárolót kínál a vizsgálati eredményekhez

Teszteset tervezése a Python Tesztelés PyUnit segítségével

Az egységteszt egy alaposztályt, tesztesetet biztosít, amely felhasználható új tesztesetek létrehozására. A teszteset megtervezéséhez három módszert alkalmaznak

Teszteset tervezése a Python

unittest.TestCase

setUp()
teardown()

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

id():string
shortDescription():string

Az első készletben a teszt előtti és utáni horgok találhatók. A setup() metódus minden tesztrutin előtt kezdődik, a teardown() pedig a rutin után.

A második metóduskészlet a teszt végrehajtását vezérli. Mindkét módszer egy üzenet karakterláncot vesz be bemenetként, és mindkettő megszakítja a folyamatban lévő tesztet. De a skiptest() metódus megszakítja az aktuális tesztet, míg a fail() metódus teljesen sikertelen.

Az utolsó vagy harmadik módszer segít a teszt meghatározásában. Az id() metódus egy karakterláncot ad vissza, amely a testcase objektum és a tesztrutin nevéből áll. És a módszer rövidenDescriptAz ion() visszaadja a docstr megjegyzést az egyes tesztrutinok indításakor.

Python Egységtesztelési példa

Az alábbi példa egy egyszerű add() függvényt tesztel az unittest modullal. Minden test_ előtaggal elnevezett metódus automatikusan lefut, és az assertEqual az eredményt a várható értékkel összeveti.

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()

Mentsd el a kódot és futtasd a python filename.py paranccsal. Az unittest futtatója jelenti, hogy hány teszt sikerült vagy sikertelen.

A használat előnyei Python Egység tesztelése

  • Segít a hibák észlelésében a fejlesztési ciklus korai szakaszában
  • Segít jobb programokat írni
  • Könnyen szinkronizálható más tesztelési módszerekkel és eszközökkel
  • Sokkal kevesebb hibája lesz
  • Könnyebb módosítani a jövőben, nagyon kevesebb következménnyel

GYIK

Az egységtesztelés egy kis kódrészletet, például egy függvényt, elszigetelten ellenőrzi. A hibákat már a fejlesztés korai szakaszában kiszűri, amikor azok olcsóbbak és könnyebben javíthatók.

A PyUnit a következő: Pythonbeépített egységtesztelési keretrendszere, amely unittest modulként érhető el. Ez a következő portja: JUnit és támogatja a fixture-öket, teszteseteket, tesztcsomagokat és egy tesztfuttatót.

Egy unittest.TestCase alosztályban írj test_ karakterlánccal kezdődő metódusokat, és használj bennük olyan assertEqual típusú kijelentő mondatokat. Futtasd a fájlt az unittest.main() függvénnyel az összes teszt végrehajtásához.

A setUp() minden tesztmetódus előtt lefut a fixture-ök előkészítéséhez, míg a tearDown() minden teszt után lefut a cleaninghez. Együttesen biztosítják a tesztek függetlenségét és megismételhetőségét.

A csonkok fix adatokat szolgáltatnak, amelyekre a teszt támaszkodik, míg a mockok hamis objektumok, amelyek ellen állításokat teszel. Mindkettő valódi függőségeket helyettesít, így egy egységet elszigetelten tesztelnek.

Az olyan mesterséges intelligencia asszisztensek, mint a GitHub Copilot, függvényekből generálnak egységtesztelési teszteseteket, peremfeltételeket és állításokat javasolnak, valamint függőségek modelljeit készítik a kódírás során.

Igen. A mesterséges intelligencia által vezérelt eszközök automatizálhatják a tesztcsomagok generálását, a várt kimenetekre vonatkozó állításokat állíthatnak elő, és növelhetik a kód lefedettségét azáltal, hogy teszteket javasolnak a nem tesztelt ágakhoz.

egységtesztelés Pythonbeépített keretrendszere osztályokat és assert metódusokat használ, míg a pytest egy harmadik féltől származó függvénykönyvtár egyszerűbb assert utasításokkal és hatékony fixture-ökkel. Mindkettő egységteszteket futtat.

Foglald össze ezt a bejegyzést a következőképpen: