Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Johdanto Pythonin Unittest-Kirjastoon: Rakenteisten Yksikkötestien Kirjoittaminen | Unittest-Kehyksen Hallinta
Pythonin Rakenteellinen Ohjelmointi

bookJohdanto Pythonin Unittest-Kirjastoon: Rakenteisten Yksikkötestien Kirjoittaminen

Unittest kuuluu Pythonin vakiokirjastoon, joten lisäasennuksia ei tarvita aloittamiseen. Se perustuu testitapausten käsitteeseen, jotka ovat Python-luokkia ja periytyvät kehyksen TestCase-luokasta. Unittest on erinomainen työkalu testauksen aloittelijoille, sillä se jäsentää testit tavalla, joka heijastaa olio-ohjelmoinnin periaatteita.

Unittestin rakenne

Unittestissä jokainen testi on metodi, joka sijaitsee unittest.TestCase-aliluokassa. Tämä rakenne kannustaa ryhmittelemään toisiinsa liittyvät testit yhteen, mikä auttaa järjestämään testikoodin loogisesti ja parantaa luettavuutta.

Testin kirjoittaminen Unittestillä

Testataan yksinkertaista funktiota, joka laskee kahden luvun keskiarvon. Tässä on testattava funktio:

def calculate_average(num1, num2):
    return (num1 + num2) / 2

Testitapauksen luominen

Testitapauksen luomiseksi määritellään luokka, joka perii unittest.TestCase-luokasta. Tämän luokan sisällä voidaan määritellä metodeja calculate_average-funktion testaamiseen.

import unittest

class TestCalculateAverage(unittest.TestCase):
    
    def test_integers(self):
        self.assertEqual(calculate_average(10, 20), 15)
    
    def test_floats(self):
        self.assertAlmostEqual(calculate_average(10.5, 20.5), 15.5)
  • Ensin import Unittest-moduuli, joka kuuluu Pythonin vakiokirjastoon;
  • class TestCalculateAverage(unittest.TestCase) luo uuden testitapauksen. Se perii unittest.TestCase-luokasta, joka tarjoaa testausominaisuudet;
  • Jokaisen luokan metodin tulisi alkaa test_-etuliitteellä;
  • Metodit käyttävät tiettyjä assert-lauseita tarkistaakseen, onko ehto tosi.

Esimerkki onnistuneesta testituloksesta

Kun kaikki testit läpäisevät Unittestissä, tuloste on selkeä ja osoittaa, että kaikki testit suoritettiin onnistuneesti ilman virheitä. Tässä esimerkki onnistuneesta testiajon tulosteesta:

...
----------------------------------------------------------------------
Ran 3 tests in 0.002s

OK

Esimerkki epäonnistuneesta testituloksesta

Jos yksi tai useampi testi epäonnistuu, tuloste antaa yksityiskohtaiset tiedot virheistä, mukaan lukien mitkä testit epäonnistuivat ja miksi. Tässä esimerkki siitä, miltä testin epäonnistuminen voi näyttää:

..F
----------------------------------------------------------------------
Ran 3 tests in 0.003s

FAILED (failures=1)

======================================================================
FAIL: test_average_floats (test_module.TestCalculateAverage)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/path/to/test_module.py", line 10, in test_average_floats
    self.assertAlmostEqual(calculate_average(10.0, 20.0), 15.1)
AssertionError: 15.0 != 15.1 within 7 places (0.10000000000000142 difference)

----------------------------------------------------------------------

Tämä tuloste sisältää:

  • ..F osoittaa, että kolme testiä suoritettiin; kaksi ensimmäistä läpäistiin (..), ja kolmas epäonnistui (F);
  • FAILED (failures=1) kertoo, että yksi testi epäonnistui;
  • Yksityiskohtainen virheraportti alkaa testin tunnisteella (test_average_floats) ja luokalla (TestCalculateAverage). Se antaa jäljityksen testikoodin riville, joka aiheutti virheen, ja selittää väitteen virheen luonteen, mukaan lukien odotetun arvon, todellisen arvon ja sallitun virhemarginaalin.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 1

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

bookJohdanto Pythonin Unittest-Kirjastoon: Rakenteisten Yksikkötestien Kirjoittaminen

Pyyhkäise näyttääksesi valikon

Unittest kuuluu Pythonin vakiokirjastoon, joten lisäasennuksia ei tarvita aloittamiseen. Se perustuu testitapausten käsitteeseen, jotka ovat Python-luokkia ja periytyvät kehyksen TestCase-luokasta. Unittest on erinomainen työkalu testauksen aloittelijoille, sillä se jäsentää testit tavalla, joka heijastaa olio-ohjelmoinnin periaatteita.

Unittestin rakenne

Unittestissä jokainen testi on metodi, joka sijaitsee unittest.TestCase-aliluokassa. Tämä rakenne kannustaa ryhmittelemään toisiinsa liittyvät testit yhteen, mikä auttaa järjestämään testikoodin loogisesti ja parantaa luettavuutta.

Testin kirjoittaminen Unittestillä

Testataan yksinkertaista funktiota, joka laskee kahden luvun keskiarvon. Tässä on testattava funktio:

def calculate_average(num1, num2):
    return (num1 + num2) / 2

Testitapauksen luominen

Testitapauksen luomiseksi määritellään luokka, joka perii unittest.TestCase-luokasta. Tämän luokan sisällä voidaan määritellä metodeja calculate_average-funktion testaamiseen.

import unittest

class TestCalculateAverage(unittest.TestCase):
    
    def test_integers(self):
        self.assertEqual(calculate_average(10, 20), 15)
    
    def test_floats(self):
        self.assertAlmostEqual(calculate_average(10.5, 20.5), 15.5)
  • Ensin import Unittest-moduuli, joka kuuluu Pythonin vakiokirjastoon;
  • class TestCalculateAverage(unittest.TestCase) luo uuden testitapauksen. Se perii unittest.TestCase-luokasta, joka tarjoaa testausominaisuudet;
  • Jokaisen luokan metodin tulisi alkaa test_-etuliitteellä;
  • Metodit käyttävät tiettyjä assert-lauseita tarkistaakseen, onko ehto tosi.

Esimerkki onnistuneesta testituloksesta

Kun kaikki testit läpäisevät Unittestissä, tuloste on selkeä ja osoittaa, että kaikki testit suoritettiin onnistuneesti ilman virheitä. Tässä esimerkki onnistuneesta testiajon tulosteesta:

...
----------------------------------------------------------------------
Ran 3 tests in 0.002s

OK

Esimerkki epäonnistuneesta testituloksesta

Jos yksi tai useampi testi epäonnistuu, tuloste antaa yksityiskohtaiset tiedot virheistä, mukaan lukien mitkä testit epäonnistuivat ja miksi. Tässä esimerkki siitä, miltä testin epäonnistuminen voi näyttää:

..F
----------------------------------------------------------------------
Ran 3 tests in 0.003s

FAILED (failures=1)

======================================================================
FAIL: test_average_floats (test_module.TestCalculateAverage)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/path/to/test_module.py", line 10, in test_average_floats
    self.assertAlmostEqual(calculate_average(10.0, 20.0), 15.1)
AssertionError: 15.0 != 15.1 within 7 places (0.10000000000000142 difference)

----------------------------------------------------------------------

Tämä tuloste sisältää:

  • ..F osoittaa, että kolme testiä suoritettiin; kaksi ensimmäistä läpäistiin (..), ja kolmas epäonnistui (F);
  • FAILED (failures=1) kertoo, että yksi testi epäonnistui;
  • Yksityiskohtainen virheraportti alkaa testin tunnisteella (test_average_floats) ja luokalla (TestCalculateAverage). Se antaa jäljityksen testikoodin riville, joka aiheutti virheen, ja selittää väitteen virheen luonteen, mukaan lukien odotetun arvon, todellisen arvon ja sallitun virhemarginaalin.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 1
some-alt