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 av Testmiljøer | Beherske Unittest-rammeverket
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Python Strukturert Programmering

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

De fire fasene i en test:

  1. SetUp: forbered miljøet. Dette kan innebære å opprette objekter i databasen, konfigurere systemtilstander som å starte tjenester eller sette opp databasetilkoblinger;
  2. Act: utfør funksjonen eller metodene som skal testes;
  3. Assert: kontroller og verifiser resultatene mot forventede utfall;
  4. TearDown: rydd opp etter hver test. Dette sikrer at endringer i miljøet ikke påvirker påfølgende tester.

SetUp og tearDown er valgfrie faser.

Implementering av SetUp og TearDown

Metodene setUp og tearDown i Unittest er instansmetoder som kalles før og etter hver testmetode, henholdsvis.

La oss se på en Book-klasse med tilpassede __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"

Neste steg er å definere testtilfellene 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>")

Etter at test_sale-tilfellet er kjørt, blir antallet bøker tilbakestilt til opprinnelig verdi for test_book_repr, fordi setUp-metoden kjøres før hver test.

SetUp og tearDown på metodenivå sikrer at hver test kjøres i et rent miljø, noe som gjør testene forutsigbare og uavhengige.

Implementering av SetUpClass og TearDownClass

Dette er klassemåter som kjøres én gang for hele klassen, ved starten og slutten av testpakken.

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å klassenivå reduserer ressursbruken ved å forberede og rydde opp ressurser som er kostbare å opprette og destruere.

Oppgave

Swipe to start coding

Øv på å bruke setUp- og tearDown-metoder i unittest ved å teste en Book-klasse.

  • Definer en testklasse kalt TestBook som arver fra unittest.TestCase.
  • Implementer en setUp-metode som oppretter en Book-instans med tittel '1984', forfatter 'George Orwell' og amount 2. Tildel den til self.book.
  • Implementer en tearDown-metode som sletter self.book-instansen.
  • Legg til en metode kalt test_sale som:
    • Kaller sale-metoden på self.book to ganger;
    • Sjekker at det andre kallet returnerer 'This book sold out'.
  • Legg til en metode kalt test_book_repr som sjekker at strengrepresentasjonen av self.book er '<Book 1984, written by George Orwell, 2 pieces>'.
  • Bruk nøyaktig disse funksjonsnavnene og klassenavnene for at testene skal bestå.

Løsning

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 5. Kapittel 3
single

single

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

close

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

Sveip for å vise menyen

De fire fasene i en test:

  1. SetUp: forbered miljøet. Dette kan innebære å opprette objekter i databasen, konfigurere systemtilstander som å starte tjenester eller sette opp databasetilkoblinger;
  2. Act: utfør funksjonen eller metodene som skal testes;
  3. Assert: kontroller og verifiser resultatene mot forventede utfall;
  4. TearDown: rydd opp etter hver test. Dette sikrer at endringer i miljøet ikke påvirker påfølgende tester.

SetUp og tearDown er valgfrie faser.

Implementering av SetUp og TearDown

Metodene setUp og tearDown i Unittest er instansmetoder som kalles før og etter hver testmetode, henholdsvis.

La oss se på en Book-klasse med tilpassede __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"

Neste steg er å definere testtilfellene 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>")

Etter at test_sale-tilfellet er kjørt, blir antallet bøker tilbakestilt til opprinnelig verdi for test_book_repr, fordi setUp-metoden kjøres før hver test.

SetUp og tearDown på metodenivå sikrer at hver test kjøres i et rent miljø, noe som gjør testene forutsigbare og uavhengige.

Implementering av SetUpClass og TearDownClass

Dette er klassemåter som kjøres én gang for hele klassen, ved starten og slutten av testpakken.

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å klassenivå reduserer ressursbruken ved å forberede og rydde opp ressurser som er kostbare å opprette og destruere.

Oppgave

Swipe to start coding

Øv på å bruke setUp- og tearDown-metoder i unittest ved å teste en Book-klasse.

  • Definer en testklasse kalt TestBook som arver fra unittest.TestCase.
  • Implementer en setUp-metode som oppretter en Book-instans med tittel '1984', forfatter 'George Orwell' og amount 2. Tildel den til self.book.
  • Implementer en tearDown-metode som sletter self.book-instansen.
  • Legg til en metode kalt test_sale som:
    • Kaller sale-metoden på self.book to ganger;
    • Sjekker at det andre kallet returnerer 'This book sold out'.
  • Legg til en metode kalt test_book_repr som sjekker at strengrepresentasjonen av self.book er '<Book 1984, written by George Orwell, 2 pieces>'.
  • Bruk nøyaktig disse funksjonsnavnene og klassenavnene for at testene skal bestå.

Løsning

Switch to desktopBytt til skrivebordet for virkelighetspraksisFortsett der du er med et av alternativene nedenfor
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 5. Kapittel 3
single

single

some-alt