Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære SetUp og TearDown i Unittest: Håndtering af Testmiljøer | Beherskelse af Unittest-Rammeværket
Python Strukturel Programmering

bookSetUp og TearDown i Unittest: Håndtering af Testmiljøer

De fire faser i en test:

  1. SetUp: forbered miljøet. Dette kan indebære oprettelse af objekter i databasen, konfiguration af systemtilstande som opstart af tjenester eller opsætning af databaseforbindelser;
  2. Act: udfør funktionen eller metoderne, der skal testes;
  3. Assert: kontroller og verificer resultaterne i forhold til de forventede resultater;
  4. TearDown: oprydning efter hver test. Dette sikrer, at ændringer i miljøet ikke påvirker efterfølgende tests.

SetUp og tearDown er valgfrie faser.

Implementering af SetUp og TearDown

Metoderne setUp og tearDown i Unittest er instansmetoder, der kaldes før og efter hver testmetode.

Lad os overveje en Book-klasse med en tilpasset __repr__ og 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æste trin er at definere testcases i TestBook-klassen.

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 test_sale-casen er gennemført, nulstilles antallet af bøger til den oprindelige værdi for test_book_repr, fordi setUp-metoden køres før hver test.

SetUp og tearDown på metodeniveau sikrer, at hver test udføres i et rent miljø, hvilket gør tests forudsigelige og uafhængige.

Implementering af SetUpClass og TearDownClass

Disse er klassemetoder, der køres én gang for hele klassen, i starten og slutningen af test-suiten.

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 og tearDown på klasseniveau reducerer omkostningerne ved at forberede og rydde op i ressourcer, der er dyre at oprette og destruere.

Opgave

Swipe to start coding

Øv dig i at bruge setUp- og tearDown-metoder i unittest ved at teste en Book-klasse.

  • Definér en testklasse med navnet TestBook, der arver fra unittest.TestCase.
  • Implementér en setUp-metode, der opretter en Book-instans med titlen '1984', forfatteren 'George Orwell' og antal 2. Tildel den til self.book.
  • Implementér en tearDown-metode, der sletter self.book-instansen.
  • Tilføj en metode med navnet test_sale, der:
    • Kalder sale-metoden på self.book to gange;
    • Sikrer, at det andet kald returnerer 'This book sold out'.
  • Tilføj en metode med navnet test_book_repr, der sikrer, at strengrepræsentationen af self.book er '<Book 1984, written by George Orwell, 2 pieces>'.
  • Brug præcis disse funktions- og klassenavne for at dine tests består.

Løsning

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 5. Kapitel 3
single

single

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

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 og TearDown i Unittest: Håndtering af Testmiljøer

Stryg for at vise menuen

De fire faser i en test:

  1. SetUp: forbered miljøet. Dette kan indebære oprettelse af objekter i databasen, konfiguration af systemtilstande som opstart af tjenester eller opsætning af databaseforbindelser;
  2. Act: udfør funktionen eller metoderne, der skal testes;
  3. Assert: kontroller og verificer resultaterne i forhold til de forventede resultater;
  4. TearDown: oprydning efter hver test. Dette sikrer, at ændringer i miljøet ikke påvirker efterfølgende tests.

SetUp og tearDown er valgfrie faser.

Implementering af SetUp og TearDown

Metoderne setUp og tearDown i Unittest er instansmetoder, der kaldes før og efter hver testmetode.

Lad os overveje en Book-klasse med en tilpasset __repr__ og 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æste trin er at definere testcases i TestBook-klassen.

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 test_sale-casen er gennemført, nulstilles antallet af bøger til den oprindelige værdi for test_book_repr, fordi setUp-metoden køres før hver test.

SetUp og tearDown på metodeniveau sikrer, at hver test udføres i et rent miljø, hvilket gør tests forudsigelige og uafhængige.

Implementering af SetUpClass og TearDownClass

Disse er klassemetoder, der køres én gang for hele klassen, i starten og slutningen af test-suiten.

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 og tearDown på klasseniveau reducerer omkostningerne ved at forberede og rydde op i ressourcer, der er dyre at oprette og destruere.

Opgave

Swipe to start coding

Øv dig i at bruge setUp- og tearDown-metoder i unittest ved at teste en Book-klasse.

  • Definér en testklasse med navnet TestBook, der arver fra unittest.TestCase.
  • Implementér en setUp-metode, der opretter en Book-instans med titlen '1984', forfatteren 'George Orwell' og antal 2. Tildel den til self.book.
  • Implementér en tearDown-metode, der sletter self.book-instansen.
  • Tilføj en metode med navnet test_sale, der:
    • Kalder sale-metoden på self.book to gange;
    • Sikrer, at det andet kald returnerer 'This book sold out'.
  • Tilføj en metode med navnet test_book_repr, der sikrer, at strengrepræsentationen af self.book er '<Book 1984, written by George Orwell, 2 pieces>'.
  • Brug præcis disse funktions- og klassenavne for at dine tests består.

Løsning

Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 5. Kapitel 3
single

single

some-alt