Vodič za PyUnit: Python Okvir za testiranje jedinice (s primjerom)

⚡ Pametni sažetak

Python Jedinično testiranje provjerava male jedinice vašeg koda izolirano kako bi rano otkrilo greške. Ovdje ćete naučiti tehnike jediničnog testiranja, PyUnit (unittest) okvir, njegove ključne klase, kako dizajnirati testni slučaj i radni primjer.

  • 🧪 Što je to: Jedinično testiranje provjerava male, izolirane jedinice koda kako bi se rano otkrile greške.
  • 🔬 Tehnike: TDD, stubovi i mockovi izoliraju kod tako da se jedinice testiraju neovisno.
  • 🐍 PyUnit: PythonUgrađeni modul unittest (PyUnit) je port od JUnit.
  • 🧱 Ključne klase: TestCase, TestSuite, TestLoader, TextTestRunner i TestResults.
  • 🤖 Pomoć umjetne inteligencije: Alati umjetne inteligencije poput Copilota trenutno generiraju testne slučajeve unittest.

Python Ispitivanje jedinice

Što je testiranje jedinica?

Ispitivanje jedinice in Python radi se za identifikaciju grešaka u ranoj fazi razvoja aplikacije kada se greške manje ponavljaju i jeftinije je popraviti.

Jedinični test je skriptirani test razine koda dizajniran u Python za provjeru male "jedinice" funkcionalnosti. Unit test je objektno orijentiran okvir koji se temelji na testnim postavkama.

Python Tehnike jediničnog testiranja

Python Jedinično testiranje uglavnom uključuje testiranje određenog modula bez pristupa bilo kojem ovisnom kodu. Razvojni programeri mogu koristiti tehnike poput završetaka i ismijavanja za razdvajanje koda u "jedinice" i pokretanje testiranja na razini jedinice na pojedinačnim dijelovima.

  • Razvoj vođen testiranjem TDD: Jedinično testiranje treba provesti zajedno s Python, a za to programeri koriste Test-Driven Development metodu. U TDD metodi prvo dizajnirate Python Unit testovi i tek onda nastavljate s pisanjem koda koji će implementirati ovu značajku.
  • Zaglavci i rugalice: To su dvije glavne tehnike koje simuliraju lažne metode koje se testiraju. A iskrčiti koristi se za ispunjavanje nekih ovisnosti potrebnih za ispravno izvođenje testa jedinice. A ismijavati s druge strane je lažni objekt koji pokreće testove gdje stavljamo assert.

    Namjere obje metode su iste za eliminiranje testiranja svih ovisnosti klase ili funkcije.

Python Okvir za jedinično testiranje

Kako biste olakšali proces testiranja jedinica i poboljšali kvalitetu vašeg projekta, preporučuje se Python Okvir za jedinično testiranje. Okvir za testiranje jedinica uključuje

Python Tehnike jediničnog testiranja

  • PyUnit: PyUnit podržava učvršćenja, testne slučajeve, testne pakete i test runner za automatizirano testiranje koda. U PyUnitu možete organizirati testne slučajeve u pakete s istim postavkama
  • Nos: Dodaci ugrađeni u Nose pomažu vam u hvatanju izlaza, pokrivanju koda, testovima dokumenata itd. Sintaksa Nosea prilično je jednostavnija i smanjuje prepreke pri pisanju testova. Proteže se Python unittest za lakše testiranje.
  • Doctest : Skripta za testiranje Doctest ide u docstring s malom funkcijom na dnu datoteke. Doctest vam omogućuje da testirate svoj kod pokretanjem primjera uključenih u dokumentaciju i provjerom da li su vratili očekivane rezultate. Slučaj upotrebe doctesta je manje detaljan i ne hvata posebne slučajeve. Oni su korisni kao izražajna dokumentacija glavnog slučaja uporabe modula i njegovih komponenti.

Jedinično testiranje s PyUnitom

Pyunit je a Python luka JUnit. Kao dio Pyunita, u modulu unittest postoji pet ključnih klasa.

Jedinično testiranje s PyUnitom

  • Klasa TestCase: Klasa TestCase nosi testne rutine i isporučuje kuke za izradu svake rutine i čišćenje nakon toga
  • Klasa TestSuite: Služi kao spremnik za prikupljanje i može sadržavati višestruke objekte testcase i višestruke objekte testsuitesa
  • Klasa TestLoader: Ova klasa učitava testne slučajeve i pakete definirane lokalno ili iz vanjske datoteke. Emitira testni skup objekata koji posjeduju te pakete i slučajeve
  • Klasa TextTestRunner: Za izvođenje testova služi standardna platforma za izvođenje testova
  • Klasa TestResults: Nudi standardni spremnik za rezultate ispitivanja

Dizajniranje testnog slučaja za Python Testiranje pomoću PyUnita

Jedinični test daje osnovnu klasu, testni slučaj, koji se može koristiti za stvaranje novih testnih slučajeva. Za dizajniranje testnog slučaja korištena su tri skupa metoda

Dizajniranje testnog slučaja za Python

unittest.TestCase

setUp()
teardown()

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

id():string
shortDescription():string

U prvom su setu udice prije i poslije testa. Metoda setup() počinje prije svake testne rutine, teardown() nakon rutine.

Drugi skup metoda kontrolira izvođenje testa. Obje metode uzimaju niz poruke kao ulaz i obje poništavaju test koji je u tijeku. Ali metoda skiptest() prekida trenutni test dok ga metoda fail() u potpunosti ne uspijeva.

Posljednja ili treća metoda pomaže u određivanju testa. Metoda id() vraća niz koji se sastoji od naziva objekta testnog slučaja i testne rutine. A metoda kratkaDescription() vraća docstr komentar na početku svake testne rutine.

Python Primjer jediničnog testa

Primjer u nastavku testira jednostavnu funkciju add() s modulom unittest. Svaka metoda s prefiksom test_ izvršava se automatski, a assertEqual provjerava rezultat u odnosu na očekivanu vrijednost.

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

Spremite kod i pokrenite ga s `python filename.py`. `unittest runner` izvještava koliko je testova prošlo ili nije prošlo.

Prednosti korištenja Python Ispitivanje jedinice

  • Pomaže vam otkriti bugove rano u razvojnom ciklusu
  • Pomaže vam da napišete bolje programe
  • Lako se sinkronizira s drugim metodama i alatima za testiranje
  • Imat će mnogo manje grešaka
  • Lakše ga je modificirati u budućnosti s vrlo manje posljedica

Pitanja i odgovori

Jedinično testiranje provjerava malu jedinicu koda, poput funkcije, izolirano. Otkriva greške u ranoj fazi razvoja, kada su jeftinije i lakše za popraviti.

PyUnit je PythonUgrađeni okvir za testiranje jedinica, dostupan kao modul unittest. To je port od JUnit i podržava fixtures, testne slučajeve, pakete i pokretač testova.

Podklasa unittest.TestCase, napišite metode koje počinju s test_ i koristite tvrdnje poput assertEqual unutar njih. Pokrenite datoteku s unittest.main() za izvršavanje svih testova.

setUp() se izvršava prije svake metode testiranja kako bi pripremio fixtures, dok se tearDown() izvršava nakon svakog testa radi čišćenja. Zajedno održavaju testove neovisnima i ponovljivima.

Stubovi daju fiksne podatke o kojima test ovisi, dok su mockovi lažni objekti protiv kojih se utvrđuje vrijednost. Oba zamjenjuju stvarne ovisnosti tako da se jedinica testira izolirano.

AI asistenti poput GitHub Copilota generiraju unittest testne slučajeve iz funkcije, predlažu rubne slučajeve i tvrdnje te stvaraju lažne verzije za ovisnosti dok pišete kod.

Da. Alati pokretani umjetnom inteligencijom mogu automatizirati generiranje testnih paketa, generirati tvrdnje za očekivane izlaze i povećati pokrivenost koda predlaganjem testova za netestirane grane.

jedinični test je PythonUgrađeni okvir koristi klase i assert metode, dok je pytest biblioteka treće strane s jednostavnijim assert naredbama i moćnim fixturesima. Oba pokreću jedinične testove.

Sažmite ovu objavu uz: