Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele SetUp ja TearDown Unittestissä: Testiympäristöjen Hallinta | Unittest-Kehyksen Hallinta
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Pythonin Rakenteellinen Ohjelmointi

bookSetUp ja TearDown Unittestissä: Testiympäristöjen Hallinta

Testin neljä vaihetta:

  1. SetUp: ympäristön valmistelu. Tämä voi sisältää objektien luomisen tietokantaan, järjestelmän tilojen määrittelyn, kuten palveluiden käynnistämisen tai tietokantayhteyksien asettamisen;
  2. Act: testattavan funktion tai metodin suoritus;
  3. Assert: tulosten tarkistus ja vertailu odotettuihin arvoihin;
  4. TearDown: siivous jokaisen testin jälkeen. Tämä varmistaa, että ympäristön muutokset eivät vaikuta seuraaviin testeihin.

SetUp ja tearDown ovat valinnaisia vaiheita.

SetUp- ja TearDown-metodien toteutus

Unittestin setUp- ja tearDown-metodit ovat instanssimetodeja, jotka kutsutaan ennen jokaista testimetodia ja sen jälkeen.

Tarkastellaan Book-luokkaa, jossa on mukautetut __repr__- ja sale-metodit.

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"

Seuraavaksi määritellään testitapaukset TestBook-luokan sisällä.

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>")

Kun test_sale-tapaus on suoritettu, kirjojen määrä palautetaan alkuperäiseen arvoon test_book_repr-testiä varten, koska setUp-metodi suoritetaan ennen jokaista testiä.

SetUp ja tearDown metodi-tasolla takaavat, että jokainen testi suoritetaan puhtaassa ympäristössä, mikä tekee testeistä ennustettavia ja toisistaan riippumattomia.

SetUpClass- ja TearDownClass-metodien toteutus

Nämä ovat luokkametodeja, jotka suoritetaan kerran koko luokalle testisarjan alussa ja lopussa.

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 ja tearDown luokkatasolla vähentävät resurssien valmistelun ja siivouksen aiheuttamaa kuormitusta, kun kyseessä ovat kalliit resurssit.

Tehtävä

Swipe to start coding

Harjoittele setUp- ja tearDown-metodien käyttöä unittest-kirjastossa testaamalla Book-luokkaa.

  • Määritä testiluokka nimeltä TestBook, joka perii luokasta unittest.TestCase.
  • Toteuta setUp-metodi, joka luo Book-instanssin otsikolla '1984', kirjoittajalla 'George Orwell' ja määrällä 2. Aseta se muuttujaan self.book.
  • Toteuta tearDown-metodi, joka poistaa self.book-instanssin.
  • Lisää metodi nimeltä test_sale, joka:
    • Kutsuu sale-metodia self.book-oliolle kahdesti;
    • Varmistaa, että toinen kutsu palauttaa arvon 'This book sold out'.
  • Lisää metodi nimeltä test_book_repr, joka varmistaa, että self.book-olion merkkiesitys on '<Book 1984, written by George Orwell, 2 pieces>'.
  • Käytä täsmälleen näitä funktio- ja luokkanimiä, jotta testit menevät läpi.

Ratkaisu

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 3
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

close

bookSetUp ja TearDown Unittestissä: Testiympäristöjen Hallinta

Pyyhkäise näyttääksesi valikon

Testin neljä vaihetta:

  1. SetUp: ympäristön valmistelu. Tämä voi sisältää objektien luomisen tietokantaan, järjestelmän tilojen määrittelyn, kuten palveluiden käynnistämisen tai tietokantayhteyksien asettamisen;
  2. Act: testattavan funktion tai metodin suoritus;
  3. Assert: tulosten tarkistus ja vertailu odotettuihin arvoihin;
  4. TearDown: siivous jokaisen testin jälkeen. Tämä varmistaa, että ympäristön muutokset eivät vaikuta seuraaviin testeihin.

SetUp ja tearDown ovat valinnaisia vaiheita.

SetUp- ja TearDown-metodien toteutus

Unittestin setUp- ja tearDown-metodit ovat instanssimetodeja, jotka kutsutaan ennen jokaista testimetodia ja sen jälkeen.

Tarkastellaan Book-luokkaa, jossa on mukautetut __repr__- ja sale-metodit.

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"

Seuraavaksi määritellään testitapaukset TestBook-luokan sisällä.

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>")

Kun test_sale-tapaus on suoritettu, kirjojen määrä palautetaan alkuperäiseen arvoon test_book_repr-testiä varten, koska setUp-metodi suoritetaan ennen jokaista testiä.

SetUp ja tearDown metodi-tasolla takaavat, että jokainen testi suoritetaan puhtaassa ympäristössä, mikä tekee testeistä ennustettavia ja toisistaan riippumattomia.

SetUpClass- ja TearDownClass-metodien toteutus

Nämä ovat luokkametodeja, jotka suoritetaan kerran koko luokalle testisarjan alussa ja lopussa.

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 ja tearDown luokkatasolla vähentävät resurssien valmistelun ja siivouksen aiheuttamaa kuormitusta, kun kyseessä ovat kalliit resurssit.

Tehtävä

Swipe to start coding

Harjoittele setUp- ja tearDown-metodien käyttöä unittest-kirjastossa testaamalla Book-luokkaa.

  • Määritä testiluokka nimeltä TestBook, joka perii luokasta unittest.TestCase.
  • Toteuta setUp-metodi, joka luo Book-instanssin otsikolla '1984', kirjoittajalla 'George Orwell' ja määrällä 2. Aseta se muuttujaan self.book.
  • Toteuta tearDown-metodi, joka poistaa self.book-instanssin.
  • Lisää metodi nimeltä test_sale, joka:
    • Kutsuu sale-metodia self.book-oliolle kahdesti;
    • Varmistaa, että toinen kutsu palauttaa arvon 'This book sold out'.
  • Lisää metodi nimeltä test_book_repr, joka varmistaa, että self.book-olion merkkiesitys on '<Book 1984, written by George Orwell, 2 pieces>'.
  • Käytä täsmälleen näitä funktio- ja luokkanimiä, jotta testit menevät läpi.

Ratkaisu

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 3
single

single

some-alt