SetUp en TearDown in Unittest: Beheer van Testomgevingen
De vier fasen van een test:
- SetUp: voorbereiden van de omgeving. Dit kan het aanmaken van objecten in de database omvatten, het configureren van systeemstatussen zoals het starten van services of het opzetten van databaseverbindingen;
- Act: uitvoeren van de functie of methoden die getest moeten worden;
- Assert: controleren en verifiëren van de uitkomsten ten opzichte van de verwachte resultaten;
- TearDown: opruimen na elke test. Dit zorgt ervoor dat eventuele wijzigingen in de omgeving geen invloed hebben op volgende tests.
SetUp en tearDown zijn optionele fasen.
Implementatie van SetUp en TearDown
De setUp en tearDown methoden in Unittest zijn instantiemethoden die respectievelijk vóór en na elke testmethode worden aangeroepen.
Beschouw een Book klasse met aangepaste __repr__ en sale methoden.
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"
De volgende stap is het definiëren van de testgevallen binnen de TestBook klasse.
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>")
Nadat de test_sale case is geslaagd, wordt het aantal boeken teruggezet naar de oorspronkelijke waarde voor de test_book_repr omdat de setUp-methode vóór elke test wordt uitgevoerd.
SetUp en tearDown op methodeniveau zorgen ervoor dat elke test in een schone omgeving draait, waardoor tests voorspelbaar en onafhankelijk zijn.
Implementatie van SetUpClass en TearDownClass
Dit zijn classmethoden die één keer voor de hele klasse worden uitgevoerd, aan het begin en einde van de test suite.
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 en tearDown op klassenniveau verminderen de overhead van het voorbereiden en opruimen van resources die duur zijn om aan te maken en te vernietigen.
Swipe to start coding
Oefen met het gebruik van de setUp- en tearDown-methoden in unittest door een Book-klasse te testen.
- Definieer een testklasse genaamd
TestBookdie erft vanunittest.TestCase. - Implementeer een
setUp-methode die eenBook-instantie aanmaakt met de titel'1984', auteur'George Orwell'en amount2. Wijs deze toe aanself.book. - Implementeer een
tearDown-methode die de instantieself.bookverwijdert. - Voeg een methode toe genaamd
test_saledie:- De
sale-methode twee keer aanroept opself.book; - Controleert dat de tweede aanroep
'This book sold out'retourneert.
- De
- Voeg een methode toe genaamd
test_book_reprdie controleert dat de stringrepresentatie vanself.bookgelijk is aan'<Book 1984, written by George Orwell, 2 pieces>'. - Gebruik exact deze functienamen en klassenamen zodat je tests slagen.
Oplossing
Bedankt voor je feedback!
single
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
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?
Geweldig!
Completion tarief verbeterd naar 3.13
SetUp en TearDown in Unittest: Beheer van Testomgevingen
Veeg om het menu te tonen
De vier fasen van een test:
- SetUp: voorbereiden van de omgeving. Dit kan het aanmaken van objecten in de database omvatten, het configureren van systeemstatussen zoals het starten van services of het opzetten van databaseverbindingen;
- Act: uitvoeren van de functie of methoden die getest moeten worden;
- Assert: controleren en verifiëren van de uitkomsten ten opzichte van de verwachte resultaten;
- TearDown: opruimen na elke test. Dit zorgt ervoor dat eventuele wijzigingen in de omgeving geen invloed hebben op volgende tests.
SetUp en tearDown zijn optionele fasen.
Implementatie van SetUp en TearDown
De setUp en tearDown methoden in Unittest zijn instantiemethoden die respectievelijk vóór en na elke testmethode worden aangeroepen.
Beschouw een Book klasse met aangepaste __repr__ en sale methoden.
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"
De volgende stap is het definiëren van de testgevallen binnen de TestBook klasse.
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>")
Nadat de test_sale case is geslaagd, wordt het aantal boeken teruggezet naar de oorspronkelijke waarde voor de test_book_repr omdat de setUp-methode vóór elke test wordt uitgevoerd.
SetUp en tearDown op methodeniveau zorgen ervoor dat elke test in een schone omgeving draait, waardoor tests voorspelbaar en onafhankelijk zijn.
Implementatie van SetUpClass en TearDownClass
Dit zijn classmethoden die één keer voor de hele klasse worden uitgevoerd, aan het begin en einde van de test suite.
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 en tearDown op klassenniveau verminderen de overhead van het voorbereiden en opruimen van resources die duur zijn om aan te maken en te vernietigen.
Swipe to start coding
Oefen met het gebruik van de setUp- en tearDown-methoden in unittest door een Book-klasse te testen.
- Definieer een testklasse genaamd
TestBookdie erft vanunittest.TestCase. - Implementeer een
setUp-methode die eenBook-instantie aanmaakt met de titel'1984', auteur'George Orwell'en amount2. Wijs deze toe aanself.book. - Implementeer een
tearDown-methode die de instantieself.bookverwijdert. - Voeg een methode toe genaamd
test_saledie:- De
sale-methode twee keer aanroept opself.book; - Controleert dat de tweede aanroep
'This book sold out'retourneert.
- De
- Voeg een methode toe genaamd
test_book_reprdie controleert dat de stringrepresentatie vanself.bookgelijk is aan'<Book 1984, written by George Orwell, 2 pieces>'. - Gebruik exact deze functienamen en klassenamen zodat je tests slagen.
Oplossing
Bedankt voor je feedback!
single