PyUnit Tutorial: Python Enhedstestramme (med eksempel)

⚡ Smart opsummering

Python Enhedstestning kontrollerer små enheder af din kode isoleret for at opdage fejl tidligt. Her lærer du enhedstestningsteknikker, PyUnit (unittest) frameworket, dets nøgleklasser, hvordan man designer en testcase og et fungerende eksempel.

  • 🧪 Hvad er det: Enhedstestning verificerer små, isolerede kodeenheder for at opdage fejl tidligt.
  • 🔬 Teknikker: TDD, stubs og mock-koder isolerer kode, så enhederne tester uafhængigt.
  • 🐍 PyUnit: Pythons indbyggede unittest-modul (PyUnit) er en port af JUnit.
  • 🧱 Nøgleklasser: TestCase, TestSuite, TestLoader, TextTestRunner og TestResults.
  • 🤖 AI-hjælp: AI-værktøjer som Copilot genererer unittest-testcases øjeblikkeligt.

Python Enhedstest

Hvad er enhedstestning?

Enhedstest in Python er gjort for at identificere fejl tidligt i udviklingsstadiet af applikationen, når fejl er mindre tilbagevendende og billigere at rette.

En enhedstest er en scriptet kodeniveautest designet i Python at verificere en lille "enhed" af funktionalitet. Unit test er en objektorienteret ramme baseret på testarmaturer.

Python Enhedstestteknikker

Python Unit Testing involverer hovedsageligt at teste et bestemt modul uden at få adgang til nogen afhængig kode. Udviklere kan bruge teknikker som stubs og mocks til at adskille kode i "enheder" og køre test på enhedsniveau på de individuelle stykker.

  • Testdrevet udvikling TDD: Enhedstest skal udføres sammen med Python, og til det bruger udviklere Test-Driven Development-metoden. I TDD-metoden designer du først Python Enhedstest, og først derefter fortsætter du med at skrive koden, der implementerer denne funktion.
  • Stubbe og håner: Det er to hovedteknikker, der simulerer falske metoder, der bliver testet. EN Stub bruges til at udfylde en vis afhængighed, der kræves for at enhedstesten kan køre korrekt. EN Mock på den anden side er en falsk genstand, som kører de test, hvor vi sætter assert.

    Intentionerne med begge metoder er de samme for at eliminere test af alle afhængigheder af en klasse eller funktion.

Python Enhedstestramme

For at gøre Unit Testing-processen lettere og forbedre kvaliteten af ​​dit projekt, anbefales det Python Enhedstestramme. Enhedstestningsrammen omfatter

Python Enhedstestteknikker

  • PyUnit: PyUnit understøtter inventar, testcases, testsuiter og en testløber til automatiseret test af koden. I PyUnit kan du organisere testcases i suiter med det samme inventar
  • Næse: Nose's indbyggede plug-ins hjælper dig med output capture, kodedækning, doctests osv. Nose syntaks er ret enklere og reducerer barriererne for at skrive test. Det strækker sig Python unittest for at gøre test nemmere.
  • Doktest: Doctest test script går i docstring med lille funktion i bunden af ​​filen. Doctest giver dig mulighed for at teste din kode ved at køre eksempler inkluderet i dokumentationen og verificere, at de returnerede de forventede resultater. Use-casen af ​​doctest er mindre detaljeret og fanger ikke særlige tilfælde. De er nyttige som en udtryksfuld dokumentation af hovedanvendelsen af ​​et modul og dets komponenter.

Enhedstest med PyUnit

Pyunit er en Python havn af JUnit. Som en del af Pyunit er der i unittest-modulet fem nøgleklasser.

Enhedstest med PyUnit

  • TestCase klasse: TestCase-klassen bærer testrutinerne og leverer kroge til at lave hver rutine og derefter rydde op
  • TestSuite klasse: Den henvender sig som en indsamlingsbeholder, og den kan have flere testcase-objekter og flere testsuite-objekter
  • TestLoader klasse: Denne klasse indlæser testcases og suiter defineret lokalt eller fra en ekstern fil. Det udsender en testsuite-objekter, der besidder disse suiter og sager
  • TextTestRunner klasse: For at køre testene henvender den sig til en standardplatform til at udføre testene
  • Klassen Testresultater: Den tilbyder en standardbeholder til testresultaterne

Design af en testcase til Python Test med PyUnit

En enhedstest giver en basisklasse, testcase, som kan bruges til at oprette nye testcases. Til design af testcasen er der tre sæt metoder, der anvendes

Design af en testcase til Python

unittest.TestCase

setUp()
teardown()

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

id():string
shortDescription():string

I det første sæt er pre og post test krogene. Setup()-metoden begynder før hver testrutine, teardown() efter rutinen.

Det andet sæt metode kontrollerer testudførelsen. Begge metoder tager en meddelelsesstreng som input, og begge annullerer en igangværende test. Men skiptest()-metoden afbryder den aktuelle test, mens fail()-metoden fejler den fuldstændigt.

Den sidste eller tredje metode hjælper med at bestemme testen. Metoden id() returnerer en streng bestående af navnet på testcase-objektet og af testrutinen. Og metoden kortDescription() returnerer docstr-kommentaren ved initieringen af ​​hver testrutine.

Python Eksempel på enhedstest

Eksemplet nedenfor tester en simpel add()-funktion med unittest-modulet. Hver metode navngivet med et test_-præfiks kører automatisk, og assertEqual kontrollerer resultatet mod den forventede værdi.

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

Gem koden og kør den med python filename.py. Unittest-runneren rapporterer, hvor mange tests der bestod eller mislykkedes.

Fordele ved at bruge Python Enhedstest

  • Det hjælper dig med at opdage fejl tidligt i udviklingscyklussen
  • Det hjælper dig med at skrive bedre programmer
  • Det synkroniserer nemt med andre testmetoder og værktøjer
  • Det vil have mange færre fejl
  • Det er lettere at ændre i fremtiden med meget mindre konsekvens

Ofte Stillede Spørgsmål

Enhedstestning verificerer en lille kodeenhed, som en funktion, isoleret. Den fanger fejl tidligt i udviklingen, når de er billigere og nemmere at rette.

PyUnit er Python's indbyggede enhedstestningsramme, tilgængelig som unittest-modulet. Det er en portering af JUnit og understøtter fixtures, testcases, suites og en testrunner.

Underklassen unittest.TestCase, skriv metoder der starter med test_, og brug assertions som assertEqual i dem. Kør filen med unittest.main() for at udføre alle tests.

setUp() kører før hver testmetode for at forberede fixtures, mens tearDown() kører efter hver test for at rydde op. Sammen holder de testene uafhængige og gentagelige.

Stubs leverer faste data, som en test afhænger af, mens mock-objekter er falske objekter, man kan påstå sig afhængige af. Begge erstatter reelle afhængigheder, så en enhed testes isoleret.

AI-assistenter som GitHub Copilot genererer unittest-testcases fra en funktion, foreslår edge-cases og assertions og opretter mocks til afhængigheder, mens du skriver kode.

Ja. AI-drevne værktøjer kan automatisere generering af testpakker, producere assertions for forventede output og øge kodedækningen ved at foreslå tests til utestede grene.

enhedstest er Python's indbyggede framework, der bruger klasser og assert-metoder, mens pytest er et tredjepartsbibliotek med enklere assert-sætninger og kraftfulde fixtures. Begge kører enhedstests.

Opsummer dette indlæg med: