Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära SetUp och TearDown i Unittest: Hantering av Testmiljöer | Behärska Unittest-Ramverket
Python Strukturell Programmering

bookSetUp och TearDown i Unittest: Hantering av Testmiljöer

Testets fyra faser:

  1. 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;
  2. Act: köra funktionen eller metoderna som ska testas;
  3. Assert: kontrollera och verifiera resultaten mot förväntade utfall;
  4. 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.

Uppgift

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 TestBook som ärver från unittest.TestCase.
  • Implementera en setUp-metod som skapar en Book-instans med titeln '1984', författaren 'George Orwell' och mängden 2. Tilldela den till self.book.
  • Implementera en tearDown-metod som tar bort instansen self.book.
  • Lägg till en metod med namnet test_sale som:
    • Anropar metoden saleself.book två gånger;
    • Verifierar att det andra anropet returnerar 'This book sold out'.
  • Lägg till en metod med namnet test_book_repr som verifierar att strängrepresentationen av self.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

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 5. Kapitel 3
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Suggested prompts:

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?

close

bookSetUp och TearDown i Unittest: Hantering av Testmiljöer

Svep för att visa menyn

Testets fyra faser:

  1. 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;
  2. Act: köra funktionen eller metoderna som ska testas;
  3. Assert: kontrollera och verifiera resultaten mot förväntade utfall;
  4. 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.

Uppgift

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 TestBook som ärver från unittest.TestCase.
  • Implementera en setUp-metod som skapar en Book-instans med titeln '1984', författaren 'George Orwell' och mängden 2. Tilldela den till self.book.
  • Implementera en tearDown-metod som tar bort instansen self.book.
  • Lägg till en metod med namnet test_sale som:
    • Anropar metoden saleself.book två gånger;
    • Verifierar att det andra anropet returnerar 'This book sold out'.
  • Lägg till en metod med namnet test_book_repr som verifierar att strängrepresentationen av self.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

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 5. Kapitel 3
single

single

some-alt