Setup und Teardown in Unittest: Verwaltung von Testumgebungen
Die vier Phasen eines Tests:
- SetUp: Vorbereitung der Umgebung. Dies kann das Erstellen von Objekten in der Datenbank, das Konfigurieren von Systemzuständen wie das Starten von Diensten oder das Einrichten von Datenbankverbindungen umfassen;
- Act: Ausführung der zu testenden Funktion oder Methode;
- Assert: Überprüfung und Validierung der Ergebnisse im Vergleich zu den erwarteten Resultaten;
- TearDown: Aufräumen nach jedem Test. Dies stellt sicher, dass Änderungen an der Umgebung keine Auswirkungen auf nachfolgende Tests haben.
SetUp und tearDown sind optionale Phasen.
Implementierung von SetUp und TearDown
Die setUp- und tearDown-Methoden im Unittest sind Instanzmethoden, die jeweils vor und nach jeder Testmethode aufgerufen werden.
Betrachten wir eine Book-Klasse mit einer benutzerdefinierten __repr__- und sale-Methode.
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"
Im nächsten Schritt definieren wir die Testfälle innerhalb der 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>")
Nachdem der test_sale-Fall bestanden wurde, wurde die Anzahl der Bücher für den test_book_repr wieder auf den ursprünglichen Wert zurückgesetzt, da die setUp-Methode vor jedem Test ausgeführt wird.
SetUp und tearDown auf Methodenebene stellen sicher, dass jeder Test in einer sauberen Umgebung ausgeführt wird, wodurch Tests vorhersehbar und unabhängig bleiben.
Implementierung von SetUpClass und TearDownClass
Dies sind Klassenmethoden, die einmal für die gesamte Klasse am Anfang und Ende der Testsuite ausgeführt werden.
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 und tearDown auf Klassenebene verringern den Aufwand für die Vorbereitung und das Aufräumen von Ressourcen, deren Erstellung und Zerstörung aufwendig ist.
Swipe to start coding
Üben Sie die Verwendung der Methoden setUp und tearDown in unittest, indem Sie eine Book-Klasse testen.
- Definieren Sie eine Testklasse mit dem Namen
TestBook, die vonunittest.TestCaseerbt. - Implementieren Sie eine
setUp-Methode, die eineBook-Instanz mit dem Titel'1984', dem Autor'George Orwell'und der Anzahl2erstellt. Weisen Sie diese Instanzself.bookzu. - Implementieren Sie eine
tearDown-Methode, die die Instanzself.booklöscht. - Fügen Sie eine Methode mit dem Namen
test_salehinzu, die:- Die Methode
salezweimal aufself.bookaufruft; - Überprüft, dass der zweite Aufruf den Wert
'This book sold out'zurückgibt.
- Die Methode
- Fügen Sie eine Methode mit dem Namen
test_book_reprhinzu, die überprüft, dass die Zeichenkettenrepräsentation vonself.book'<Book 1984, written by George Orwell, 2 pieces>'ist. - Verwenden Sie genau diese Funktions- und Klassennamen, damit Ihre Tests erfolgreich sind.
Lösung
Danke für Ihr Feedback!
single
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Großartig!
Completion Rate verbessert auf 3.13
Setup und Teardown in Unittest: Verwaltung von Testumgebungen
Swipe um das Menü anzuzeigen
Die vier Phasen eines Tests:
- SetUp: Vorbereitung der Umgebung. Dies kann das Erstellen von Objekten in der Datenbank, das Konfigurieren von Systemzuständen wie das Starten von Diensten oder das Einrichten von Datenbankverbindungen umfassen;
- Act: Ausführung der zu testenden Funktion oder Methode;
- Assert: Überprüfung und Validierung der Ergebnisse im Vergleich zu den erwarteten Resultaten;
- TearDown: Aufräumen nach jedem Test. Dies stellt sicher, dass Änderungen an der Umgebung keine Auswirkungen auf nachfolgende Tests haben.
SetUp und tearDown sind optionale Phasen.
Implementierung von SetUp und TearDown
Die setUp- und tearDown-Methoden im Unittest sind Instanzmethoden, die jeweils vor und nach jeder Testmethode aufgerufen werden.
Betrachten wir eine Book-Klasse mit einer benutzerdefinierten __repr__- und sale-Methode.
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"
Im nächsten Schritt definieren wir die Testfälle innerhalb der 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>")
Nachdem der test_sale-Fall bestanden wurde, wurde die Anzahl der Bücher für den test_book_repr wieder auf den ursprünglichen Wert zurückgesetzt, da die setUp-Methode vor jedem Test ausgeführt wird.
SetUp und tearDown auf Methodenebene stellen sicher, dass jeder Test in einer sauberen Umgebung ausgeführt wird, wodurch Tests vorhersehbar und unabhängig bleiben.
Implementierung von SetUpClass und TearDownClass
Dies sind Klassenmethoden, die einmal für die gesamte Klasse am Anfang und Ende der Testsuite ausgeführt werden.
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 und tearDown auf Klassenebene verringern den Aufwand für die Vorbereitung und das Aufräumen von Ressourcen, deren Erstellung und Zerstörung aufwendig ist.
Swipe to start coding
Üben Sie die Verwendung der Methoden setUp und tearDown in unittest, indem Sie eine Book-Klasse testen.
- Definieren Sie eine Testklasse mit dem Namen
TestBook, die vonunittest.TestCaseerbt. - Implementieren Sie eine
setUp-Methode, die eineBook-Instanz mit dem Titel'1984', dem Autor'George Orwell'und der Anzahl2erstellt. Weisen Sie diese Instanzself.bookzu. - Implementieren Sie eine
tearDown-Methode, die die Instanzself.booklöscht. - Fügen Sie eine Methode mit dem Namen
test_salehinzu, die:- Die Methode
salezweimal aufself.bookaufruft; - Überprüft, dass der zweite Aufruf den Wert
'This book sold out'zurückgibt.
- Die Methode
- Fügen Sie eine Methode mit dem Namen
test_book_reprhinzu, die überprüft, dass die Zeichenkettenrepräsentation vonself.book'<Book 1984, written by George Orwell, 2 pieces>'ist. - Verwenden Sie genau diese Funktions- und Klassennamen, damit Ihre Tests erfolgreich sind.
Lösung
Danke für Ihr Feedback!
single