SetUp og TearDown i Unittest: Håndtering av Testmiljøer
De fire fasene i en test:
- SetUp: forbered miljøet. Dette kan innebære å opprette objekter i databasen, konfigurere systemtilstander som å starte tjenester eller sette opp databasetilkoblinger;
- Act: utfør funksjonen eller metodene som skal testes;
- Assert: kontroller og verifiser resultatene mot forventede utfall;
- TearDown: rydd opp etter hver test. Dette sikrer at endringer i miljøet ikke påvirker påfølgende tester.
SetUp og tearDown er valgfrie faser.
Implementering av SetUp og TearDown
Metodene setUp og tearDown i Unittest er instansmetoder som kalles før og etter hver testmetode, henholdsvis.
La oss se på en Book-klasse med tilpassede __repr__- og sale-metoder.
class Book:
def __init__(self, title, author, amount):
self.title = title
self.author = author
self.amount = amount
def __repr__(self):
return f"<Book {self.title}, written by {self.author}, {self.amount} pieces>"
def sale(self):
if self.amount > 0:
self.amount -= 1
else:
return "This book sold out"
Neste steg er å definere testtilfellene i TestBook-klassen.
import unittest
class TestBook(unittest.TestCase):
def setUp(self):
print("Setting up the environment for each test.")
self.book = Book("1984", "George Orwell", 2)
def tearDown(self):
print("Cleaning up after each test.")
del self.book
def test_sale(self):
self.book.sale()
assert self.book.sale() == "This book sold out"
def test_book_repr(self):
self.assertEqual(repr(self.book), "<Book 1984, written by George Orwell, 2 pieces>")
Etter at test_sale-tilfellet er kjørt, blir antallet bøker tilbakestilt til opprinnelig verdi for test_book_repr, fordi setUp-metoden kjøres før hver test.
SetUp og tearDown på metodenivå sikrer at hver test kjøres i et rent miljø, noe som gjør testene forutsigbare og uavhengige.
Implementering av SetUpClass og TearDownClass
Dette er klassemåter som kjøres én gang for hele klassen, ved starten og slutten av testpakken.
class TestBook(unittest.TestCase):
@classmethod
def setUpClass(cls):
"""This code will run before all tests"""
print("Setting up the environment for all tests.")
cls.book = Book("1984", "George Orwell", 2)
@classmethod
def tearDownClass(cls):
"""This code will run after all tests"""
print("Cleaning up after all tests.")
def test_sale(self):
self.book.sale()
assert self.book.sale() == "This book sold out"
def test_book_repr(self):
self.assertEqual(repr(self.book), "<Book 1984, written by George Orwell, 2 pieces>")
# An AssertionError will occur because the amount was changed in the
# 'test_sale' and the book was not updated prior to this test.
SetUp og tearDown på klassenivå reduserer ressursbruken ved å forberede og rydde opp ressurser som er kostbare å opprette og destruere.
Swipe to start coding
Øv på å bruke setUp- og tearDown-metoder i unittest ved å teste en Book-klasse.
- Definer en testklasse kalt
TestBooksom arver fraunittest.TestCase. - Implementer en
setUp-metode som oppretter enBook-instans med tittel'1984', forfatter'George Orwell'og amount2. Tildel den tilself.book. - Implementer en
tearDown-metode som sletterself.book-instansen. - Legg til en metode kalt
test_salesom:- Kaller
sale-metoden påself.bookto ganger; - Sjekker at det andre kallet returnerer
'This book sold out'.
- Kaller
- Legg til en metode kalt
test_book_reprsom sjekker at strengrepresentasjonen avself.booker'<Book 1984, written by George Orwell, 2 pieces>'. - Bruk nøyaktig disse funksjonsnavnene og klassenavnene for at testene skal bestå.
Løsning
Takk for tilbakemeldingene dine!
single
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Can you explain the difference between setUp/tearDown and setUpClass/tearDownClass in more detail?
What happens if I don't use setUp or tearDown methods in my tests?
Can you show an example where setUpClass and tearDownClass are necessary?
Fantastisk!
Completion rate forbedret til 3.13
SetUp og TearDown i Unittest: Håndtering av Testmiljøer
Sveip for å vise menyen
De fire fasene i en test:
- SetUp: forbered miljøet. Dette kan innebære å opprette objekter i databasen, konfigurere systemtilstander som å starte tjenester eller sette opp databasetilkoblinger;
- Act: utfør funksjonen eller metodene som skal testes;
- Assert: kontroller og verifiser resultatene mot forventede utfall;
- TearDown: rydd opp etter hver test. Dette sikrer at endringer i miljøet ikke påvirker påfølgende tester.
SetUp og tearDown er valgfrie faser.
Implementering av SetUp og TearDown
Metodene setUp og tearDown i Unittest er instansmetoder som kalles før og etter hver testmetode, henholdsvis.
La oss se på en Book-klasse med tilpassede __repr__- og sale-metoder.
class Book:
def __init__(self, title, author, amount):
self.title = title
self.author = author
self.amount = amount
def __repr__(self):
return f"<Book {self.title}, written by {self.author}, {self.amount} pieces>"
def sale(self):
if self.amount > 0:
self.amount -= 1
else:
return "This book sold out"
Neste steg er å definere testtilfellene i TestBook-klassen.
import unittest
class TestBook(unittest.TestCase):
def setUp(self):
print("Setting up the environment for each test.")
self.book = Book("1984", "George Orwell", 2)
def tearDown(self):
print("Cleaning up after each test.")
del self.book
def test_sale(self):
self.book.sale()
assert self.book.sale() == "This book sold out"
def test_book_repr(self):
self.assertEqual(repr(self.book), "<Book 1984, written by George Orwell, 2 pieces>")
Etter at test_sale-tilfellet er kjørt, blir antallet bøker tilbakestilt til opprinnelig verdi for test_book_repr, fordi setUp-metoden kjøres før hver test.
SetUp og tearDown på metodenivå sikrer at hver test kjøres i et rent miljø, noe som gjør testene forutsigbare og uavhengige.
Implementering av SetUpClass og TearDownClass
Dette er klassemåter som kjøres én gang for hele klassen, ved starten og slutten av testpakken.
class TestBook(unittest.TestCase):
@classmethod
def setUpClass(cls):
"""This code will run before all tests"""
print("Setting up the environment for all tests.")
cls.book = Book("1984", "George Orwell", 2)
@classmethod
def tearDownClass(cls):
"""This code will run after all tests"""
print("Cleaning up after all tests.")
def test_sale(self):
self.book.sale()
assert self.book.sale() == "This book sold out"
def test_book_repr(self):
self.assertEqual(repr(self.book), "<Book 1984, written by George Orwell, 2 pieces>")
# An AssertionError will occur because the amount was changed in the
# 'test_sale' and the book was not updated prior to this test.
SetUp og tearDown på klassenivå reduserer ressursbruken ved å forberede og rydde opp ressurser som er kostbare å opprette og destruere.
Swipe to start coding
Øv på å bruke setUp- og tearDown-metoder i unittest ved å teste en Book-klasse.
- Definer en testklasse kalt
TestBooksom arver fraunittest.TestCase. - Implementer en
setUp-metode som oppretter enBook-instans med tittel'1984', forfatter'George Orwell'og amount2. Tildel den tilself.book. - Implementer en
tearDown-metode som sletterself.book-instansen. - Legg til en metode kalt
test_salesom:- Kaller
sale-metoden påself.bookto ganger; - Sjekker at det andre kallet returnerer
'This book sold out'.
- Kaller
- Legg til en metode kalt
test_book_reprsom sjekker at strengrepresentasjonen avself.booker'<Book 1984, written by George Orwell, 2 pieces>'. - Bruk nøyaktig disse funksjonsnavnene og klassenavnene for at testene skal bestå.
Løsning
Takk for tilbakemeldingene dine!
single