Unittest¶
A Python beépített unittest
modulja lehetővé teszi a kódok tesztelését egy strukturált keretrendszer segítségével. Ezzel az eszközzel automatizálhatjuk a teszteket, biztosítva, hogy a kódunk helyesen működjön különböző bemenetekkel és esetekben. A unittest egy xUnit-stílusú tesztelési keretrendszer, amelyet hasonló rendszerek inspiráltak, mint a JUnit Java-ban.
A unittest
által használt tesztelési megközelítés egységtesztelésnek (unit testing) nevezett kategóriába tartozik.
Az egységtesztelés célja az, hogy a kód legkisebb, elkülöníthető egységeit (általában függvényeket vagy metódusokat) teszteljük, és ellenőrizzük, hogy ezek az egységek önállóan helyesen működnek-e. Az egységtesztek nagyon részletesek és az alkalmazás különböző elemeinek helyes működését biztosítják.
A tesztelési kategóriák közé tartoznak még a következők is:
- Integrációs tesztelés (Integration testing): Ez a tesztelési típus azt vizsgálja, hogy a különálló modulok, egységek hogyan működnek együtt, tehát az egyes részek összekapcsolására és a rendszer egységként való tesztelésére fókuszál.
- Funkcionális tesztelés (Functional testing): Itt a tesztelés célja az, hogy a rendszer egy adott funkciója a specifikációknak megfelelően működik-e.
- Rendszertesztelés (System testing): Ez a teljes rendszert együttesen teszteli annak érdekében, hogy a rendszer minden összetevője együtt megfelelően működjön.
- Elfogadási tesztelés (Acceptance testing): A végső felhasználó vagy az ügyfél által végzett tesztelés, amely azt ellenőrzi, hogy a rendszer megfelel-e a megadott követelményeknek.
- Regressziós tesztelés (Regression testing): A tesztelés célja annak biztosítása, hogy az új kód vagy módosítás ne vezessen be új hibákat a már létező funkciókba.
A unittest modul tehát kifejezetten az egységtesztelés eszköze, amely a kód kis, izolált részeinek megbízhatóságát segít ellenőrizni.
Alapok¶
A unittest
modulban a tesztek szervezésének alapegysége a tesztosztály. Minden tesztosztály a unittest.TestCase
osztályból származik, amely tartalmazza azokat a módszereket, amelyeket a tesztesetekben használhatunk az ellenőrzésekhez. A tesztesetek egyedi tesztfunkciókat képviselnek, amelyek mindig a test_
előtaggal kezdődnek, így a keretrendszer felismeri őket tesztként.
Tesztesetek írása¶
A tesztesetek azokat a kódrészeket tartalmazzák, amelyeket le szeretnénk tesztelni. Az assert
metódusokat használhatjuk annak ellenőrzésére, hogy a várt eredmények megfelelnek-e a tényleges eredményeknek. Ha egy assert
metódus sikertelen, a teszt elbukik.
Példa
Íme egy egyszerű példa arra, hogyan hozhatunk létre egy tesztosztályt és teszteseteket:
Fontos metódusok¶
A unittest.TestCase
osztály számos beépített assert metódust biztosít, amelyekkel különböző feltételeket ellenőrizhetünk:
assertEqual(a, b)
: Ellenőrzi, hogy a két érték egyenlő-e.assertNotEqual(a, b)
: Ellenőrzi, hogy a két érték nem egyenlő-e.assertTrue(x)
: Ellenőrzi, hogy a kifejezés igaz-e.assertFalse(x)
: Ellenőrzi, hogy a kifejezés hamis-e.assertIs(a, b)
: Ellenőrzi, hogy két objektum ugyanaz az objektum-e.assertIsNone(x)
: Ellenőrzi, hogy az érték None-e.assertIn(a, b)
: Ellenőrzi, hogy egy elem szerepel-e egy másikban (pl. lista, string).
Setup és Teardown¶
A unittest
lehetőséget biztosít arra is, hogy minden teszt előtt és után bizonyos előkészítő vagy takarítási műveleteket hajtsunk végre. Erre a célra használhatjuk a következő metódusokat:
setUp()
: Ezt a metódust minden teszt futása előtt automatikusan meghívja a keretrendszer. Itt állíthatjuk be a tesztelési környezetet.tearDown()
: Minden teszt futása után automatikusan lefut. Itt takaríthatjuk el azokat az erőforrásokat, amelyekre a tesztnek már nincs szüksége.
Példa Setup és Teardown használatára
Tesztek futtatása¶
A teszteket a parancssorból futtathatjuk az alábbi módon:
Ez a parancs futtatja a test_file.py
fájlban található összes tesztet.
Ha a tesztek sikeresek, a kimenetben a zöld "OK" felirat jelenik meg, ha valami hibás, a piros "FAIL" jelzés mutatja a problémát.
Tesztösszesítők¶
A unittest modul fejlettebb funkciókat is kínál, például:
- Tesztcsoportosítás és futtatás tesztösszesítők segítségével.
- Tesztelési sorrend módosítása.
- Hibakezelés és figyelmeztetések konfigurálása.