Kursinhalt
Python Fortgeschrittene Konzepte
Python Fortgeschrittene Konzepte
Setup- und Teardown-Schritte
Die vier Phasen eines Tests:
- SetUp: Bereiten Sie die Umgebung vor. 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: Führen Sie die zu testende Funktion oder Methode aus;
- Assert: Überprüfen und verifizieren Sie die Ergebnisse im Vergleich zu den erwarteten Ergebnissen;
- TearDown: Bereinigen Sie nach jedem Test. Dies stellt sicher, dass Änderungen an der Umgebung nachfolgende Tests nicht beeinflussen.
SetUp und tearDown sind optionale Phasen.
Implementierung von SetUp und TearDown
Die setUp- und tearDown-Methoden in Unittest sind Instanzmethoden, die vor und nach jeder Testmethode aufgerufen werden.
Betrachten wir eine Book
-Klasse mit benutzerdefinierten __repr__
- und 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"
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
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, was Tests vorhersehbar und unabhängig macht.
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 reduzieren den Aufwand für die Vorbereitung und Bereinigung von Ressourcen, die teuer zu erstellen und zu zerstören sind.
Danke für Ihr Feedback!