SetUp och TearDown i Unittest: Hantering av Testmiljöer
Testets fyra faser:
- SetUp: förbereda miljön. Detta kan innebära att skapa objekt i databasen, konfigurera systemtillstånd som att starta tjänster eller upprätta databasanslutningar;
- Act: köra funktionen eller metoderna som ska testas;
- Assert: kontrollera och verifiera resultaten mot förväntade utfall;
- TearDown: städa upp efter varje test. Detta säkerställer att eventuella ändringar i miljön inte påverkar efterföljande tester.
SetUp och tearDown är valfria faser.
Implementering av SetUp och TearDown
Metoderna setUp och tearDown i Unittest är instansmetoder som anropas före respektive efter varje testmetod.
Vi betraktar en Book-klass med en anpassad __repr__ och 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"
Nästa steg är att definiera testfallen i klassen TestBook.
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>")
Efter att test_sale-fallet har körts återställs antalet böcker till ursprungsvärdet för test_book_repr eftersom setUp-metoden körs före varje test.
SetUp och tearDown på metodnivå säkerställer att varje test körs i en ren miljö, vilket gör testerna förutsägbara och oberoende.
Implementering av SetUpClass och TearDownClass
Dessa är klassmetoder som körs en gång för hela klassen, i början och slutet av testsuiten.
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 och tearDown på klassnivå minskar belastningen av att förbereda och städa upp resurser som är kostsamma att skapa och förstöra.
Swipe to start coding
Öva på att använda metoderna setUp och tearDown i unittest genom att testa en Book-klass.
- Definiera en testklass med namnet
TestBooksom ärver frånunittest.TestCase. - Implementera en
setUp-metod som skapar enBook-instans med titeln'1984', författaren'George Orwell'och mängden2. Tilldela den tillself.book. - Implementera en
tearDown-metod som tar bort instansenself.book. - Lägg till en metod med namnet
test_salesom:- Anropar metoden
salepåself.booktvå gånger; - Verifierar att det andra anropet returnerar
'This book sold out'.
- Anropar metoden
- Lägg till en metod med namnet
test_book_reprsom verifierar att strängrepresentationen avself.bookär'<Book 1984, written by George Orwell, 2 pieces>'. - Använd exakt dessa funktionsnamn och klassnamn för att dina tester ska godkännas.
Lösning
Tack för dina kommentarer!
single
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
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?
Fantastiskt!
Completion betyg förbättrat till 3.13
SetUp och TearDown i Unittest: Hantering av Testmiljöer
Svep för att visa menyn
Testets fyra faser:
- SetUp: förbereda miljön. Detta kan innebära att skapa objekt i databasen, konfigurera systemtillstånd som att starta tjänster eller upprätta databasanslutningar;
- Act: köra funktionen eller metoderna som ska testas;
- Assert: kontrollera och verifiera resultaten mot förväntade utfall;
- TearDown: städa upp efter varje test. Detta säkerställer att eventuella ändringar i miljön inte påverkar efterföljande tester.
SetUp och tearDown är valfria faser.
Implementering av SetUp och TearDown
Metoderna setUp och tearDown i Unittest är instansmetoder som anropas före respektive efter varje testmetod.
Vi betraktar en Book-klass med en anpassad __repr__ och 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"
Nästa steg är att definiera testfallen i klassen TestBook.
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>")
Efter att test_sale-fallet har körts återställs antalet böcker till ursprungsvärdet för test_book_repr eftersom setUp-metoden körs före varje test.
SetUp och tearDown på metodnivå säkerställer att varje test körs i en ren miljö, vilket gör testerna förutsägbara och oberoende.
Implementering av SetUpClass och TearDownClass
Dessa är klassmetoder som körs en gång för hela klassen, i början och slutet av testsuiten.
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 och tearDown på klassnivå minskar belastningen av att förbereda och städa upp resurser som är kostsamma att skapa och förstöra.
Swipe to start coding
Öva på att använda metoderna setUp och tearDown i unittest genom att testa en Book-klass.
- Definiera en testklass med namnet
TestBooksom ärver frånunittest.TestCase. - Implementera en
setUp-metod som skapar enBook-instans med titeln'1984', författaren'George Orwell'och mängden2. Tilldela den tillself.book. - Implementera en
tearDown-metod som tar bort instansenself.book. - Lägg till en metod med namnet
test_salesom:- Anropar metoden
salepåself.booktvå gånger; - Verifierar att det andra anropet returnerar
'This book sold out'.
- Anropar metoden
- Lägg till en metod med namnet
test_book_reprsom verifierar att strängrepresentationen avself.bookär'<Book 1984, written by George Orwell, 2 pieces>'. - Använd exakt dessa funktionsnamn och klassnamn för att dina tester ska godkännas.
Lösning
Tack för dina kommentarer!
single