Bevezetés a Python Unit Test használatához
A szoftver minőségbiztosítás (QA: Quality Assurance) fontos részei az egységtesztek (Unit test). Ezek teszik lehetővé, hogy az egymástól független komponensek helyes működését le tudjuk tesztelni.
Pythonban egységteszteket legegyszerűbben a beépített unittest modul felhasználásával lehet írni.
Amiért fontos, hogy egységteszteket írjunk
- Helyes működés biztosítása: Az egységtesztek segítenek ellenőrizni az adott komponens helyes működését, ezáltal csökkentve az esélyt a futásidejű hibák keletkezésében.
- A kódminőség javítása: Az egységtesztek írása rákényszerít bennünket, hogy átgondoljuk a megírt kódokat, így erősítve a jobb tervezést és a karbantarthatóbb implementációt.
- A komponensek elromlásának kiszűrése: Az átalakítások során segítenek az egységtesztek abban is, hogy kiszűrjük a régebben jól működő, de egy átalakítás miatt elromlott komponenst. Így biztosíthatjuk a szoftverünk stabilitását.
- A hibakeresési idő csökkentése: Amikor egy hiba előfordul, akkor az egységtesztekkel sokszor könnyebben felderíthetjük, hogy mi a valós ok, így lerövidül a javítási idő.
Az alapegységek
- Tesztesetek (Test cases): A teszteset egy kicsi, egységnyi része az egységtesztnek, ami egy apró részegységre fókuszál a tesztelés során.
- Teszcsomagok (Test suites): Az egymással logikai kapcsolatban álló teszteseteket tesztcsomagokba szervezzük.
- Állítások (Assertions): Az állítások segítségével ellenőrizhetjük, hogy az éppen tesztelt kódrészlet helyes eredményt adott-e vissza. (pl. assertTrue, assertFalse)
Egységtesztek írása Pythonban a beépített unittest modul segítségével
- Importáljuk a
unittest modult.
- Hozzunk létre egy teszt osztályt ami a
unittest.TestCase ősosztályból származik.
- Definiáljunk metódusokat a teszt osztályunkban, amelyek neveit rendre a
test_ prefix segítségével jelöljünk meg.
- Használjuk a
assert utasításokat a kódunk ellenőrzésére.
Példa
import unittest
def add_numbers(x, y):
return x + y
class TestAddFunction(unittest.TestCase):
def test_add_numbers_positive(self):
self.assertEqual(add_numbers(2, 3), 5)
def test_add_numbers_negative(self):
self.assertNotEqual(add_numbers(-2, 3), 15)
Legjobb gyakorlatok, bevett szokások
- Tartsuk a teszteseteinket egyszerű és lényegretörő formában: Minden teszteset csak egy egyszerű részt teszteljen!
- Használjunk beszédes neveket: Használjunk egyértelmű és beszédes neveket a tesztosztályainkhoz és metódusaihoz!
- Használjunk assert-eket: Használjunk assert-eket az elvárt viselkedés ellenőrzésére a kódunkban!
- Teszteljük a várható hibákat: Teszteljük, hogy a kódunk helyesen kezeli-e a várható hibákat és kivételeket!