PyUnit veiledning: Python Rammeverk for enhetstesting (med eksempel)

โšก Smart oppsummering

Python Enhetstesting sjekker smรฅ enheter av koden din isolert for รฅ fange opp feil tidlig. Her lรฆrer du teknikker for enhetstesting, PyUnit-rammeverket (unittest), dets viktigste klasser, hvordan du designer et testtilfelle og et fungerende eksempel.

  • ๐Ÿงช Hva det er: Enhetstesting verifiserer smรฅ, isolerte kodeenheter for รฅ fange opp feil tidlig.
  • ๐Ÿ”ฌ teknikker: TDD, stubs og mock-koder isolerer kode slik at enhetene testes uavhengig.
  • ๐Ÿ PyUnit: PythonDen innebygde unittest-modulen (PyUnit) er en port av JUnit.
  • ๐Ÿงฑ Nรธkkelklasser: TestCase, TestSuite, TestLoader, TextTestRunner og TestResults.
  • ๐Ÿค– AI-hjelp: AI-verktรธy som Copilot genererer enhetstesttilfeller umiddelbart.

Python Enhetstesting

Hva er enhetstesting?

Enhetstesting in Python gjรธres for รฅ identifisere feil tidlig i utviklingsstadiet av applikasjonen nรฅr feil er mindre gjentakende og rimeligere รฅ fikse.

En enhetstest er en skriptet kodenivรฅtest designet i Python for รฅ verifisere en liten "enhet" av funksjonalitet. Unit test er et objektorientert rammeverk basert pรฅ testarmaturer.

Python Enhetstestingsteknikker

Python Enhetstesting innebรฆrer hovedsakelig รฅ teste en bestemt modul uten รฅ fรฅ tilgang til noen avhengig kode. Utviklere kan bruke teknikker som stubber og spotter for รฅ skille kode i "enheter" og kjรธre testing pรฅ enhetsnivรฅ pรฅ de individuelle brikkene.

  • Testdrevet utvikling TDD: Enhetstesting bรธr utfรธres sammen med Python, og for det bruker utviklere Test-Driven Development-metoden. I TDD-metoden designer du fรธrst Python Enhetstester og fรธrst da fortsetter du รฅ skrive koden som skal implementere denne funksjonen.
  • Stubber og hรฅner: De er to hovedteknikker som simulerer falske metoder som blir testet. EN stub brukes til รฅ fylle ut noe avhengighet som kreves for at enhetstesten skal kjรธre riktig. EN hรฅne pรฅ den annen side er en falsk gjenstand som kjรธrer testene der vi legger pรฅstรฅ.

    Intensjonene til begge metodene er de samme for รฅ eliminere testing av alle avhengighetene til en klasse eller funksjon.

Python Rammeverk for enhetstesting

For รฅ gjรธre enhetstestingen enklere og forbedre kvaliteten pรฅ prosjektet ditt, anbefales det Python Rammeverk for enhetstesting. Rammeverket for enhetstesting inkluderer

Python Enhetstestingsteknikker

  • PyUnit: PyUnit stรธtter inventar, testtilfeller, testsuiter og en testlรธper for automatisert testing av koden. I PyUnit kan du organisere testtilfeller i suiter med samme inventar
  • nese: Nose's innebygde plug-ins hjelper deg med utdatafangst, kodedekning, doctests osv. Nesesyntaks er ganske enklere og reduserer barrierene for รฅ skrive tester. Den strekker seg Python unittest for รฅ gjรธre testingen enklere.
  • Doktest: Doctest testskript gรฅr i docstring med liten funksjon nederst i filen. Doctest lar deg teste koden din ved รฅ kjรธre eksempler inkludert i dokumentasjonen og bekrefte at de ga de forventede resultatene. Brukssaken til doctest er mindre detaljert og fanger ikke opp spesielle tilfeller. De er nyttige som en uttrykksfull dokumentasjon av hovedbrukssaken til en modul og dens komponenter.

Enhetstesting med PyUnit

Pyunit er en Python havn av JUnit. Som en del av Pyunit er det fem nรธkkelklasser i unittest-modulen.

Enhetstesting med PyUnit

  • TestCase klasse: TestCase-klassen bรฆrer testrutinene og leverer kroker for รฅ lage hver rutine og rydde opp etterpรฅ
  • TestSuite klasse: Den henvender seg som en oppsamlingsbeholder, og den kan ha flere testcase-objekter og flere testsuite-objekter
  • TestLoader klasse: Denne klassen laster testtilfeller og suiter definert lokalt eller fra en ekstern fil. Den sender ut en testsuite-objekter som har disse suitene og sakene
  • TextTestRunner-klassen: For รฅ kjรธre testene henvender den seg til en standardplattform for รฅ utfรธre testene
  • Klassen Testresultater: Den tilbyr en standardbeholder for testresultatene

Designe en testcase for Python Testing med PyUnit

En enhetstest gir en basisklasse, testcase, som kan brukes til รฅ lage nye testcases. For utforming av testtilfellet er det tre sett med metoder som brukes

Designe en testcase for Python

unittest.TestCase

setUp()
teardown()

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

id():string
shortDescription():string

I det fรธrste settet er pre- og posttestkrokene. Setup()-metoden begynner fรธr hver testrutine, teardown() etter rutinen.

Det andre settet med metode kontrollerer testutfรธrelse. Begge metodene tar en meldingsstreng som input, og begge kansellerer en pรฅgรฅende test. Men skiptest()-metoden avbryter den gjeldende testen mens fail()-metoden mislykkes fullstendig.

Den siste eller tredje metoden hjelper til med รฅ bestemme testen. Metoden id() returnerer en streng som bestรฅr av navnet pรฅ testcase-objektet og testrutinen. Og metoden kortDescription() returnerer docstr-kommentaren ved initiering av hver testrutine.

Python Eksempel pรฅ enhetstest

Eksemplet nedenfor tester en enkel add()-funksjon med unittest-modulen. Hver metode navngitt med et test_-prefiks kjรธrer automatisk, og assertEqual sjekker resultatet mot den forventede verdien.

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

Lagre koden og kjรธr den med python filename.py. Unittest-kjรธreren rapporterer hvor mange tester som ble bestรฅtt eller mislyktes.

Fordeler med รฅ bruke Python Enhetstesting

  • Det hjelper deg รฅ oppdage feil tidlig i utviklingssyklusen
  • Det hjelper deg รฅ skrive bedre programmer
  • Den synkroniseres enkelt med andre testmetoder og verktรธy
  • Den vil ha mange fรฆrre feil
  • Det er lettere รฅ endre i fremtiden med svรฆrt mindre konsekvens

Spรธrsmรฅl og svar

Enhetstesting verifiserer en liten kodeenhet, som en funksjon, isolert. Den fanger opp feil tidlig i utviklingen, nรฅr de er billigere og enklere รฅ fikse.

PyUnit er Pythons innebygde enhetstestingsrammeverk, tilgjengelig som unittest-modulen. Det er en portering av JUnit og stรธtter inventar, testtilfeller, suiter og en testlรธper.

Underklassen unittest.TestCase, skriv metoder som starter med test_, og bruk pรฅstander som assertEqual inni dem. Kjรธr filen med unittest.main() for รฅ kjรธre alle testene.

setUp() kjรธrer fรธr hver testmetode for รฅ klargjรธre inventar, mens tearDown() kjรธrer etter hver test for รฅ rydde opp. Sammen holder de testene uavhengige og repeterbare.

Stubber leverer faste data som en test er avhengig av, mens mock-objekter er falske objekter du kan pรฅstรฅ noe mot. Begge erstatter reelle avhengigheter, slik at en enhet testes isolert.

AI-assistenter som GitHub Copilot genererer enhetstesttilfeller fra en funksjon, foreslรฅr kanttilfeller og pรฅstander, og lager mock-er for avhengigheter mens du skriver kode.

Ja. AI-drevne verktรธy kan automatisere generering av testpakker, produsere pรฅstander for forventede resultater og รธke kodedekningen ved รฅ foreslรฅ tester for utestede grener.

enhetstesten er Pythons innebygde rammeverk som bruker klasser og assert-metoder, mens pytest er et tredjepartsbibliotek med enklere assert-setninger og kraftige fixtures. Begge kjรธrer enhetstester.

Oppsummer dette innlegget med: