Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Introduktion til Unittest i Python: Skrivning af Strukturerede Enhedstests | Beherskelse af Unittest-Rammeværket
Python Strukturel Programmering

bookIntroduktion til Unittest i Python: Skrivning af Strukturerede Enhedstests

Unittest er en del af Pythons standardbibliotek, hvilket betyder, at ingen yderligere installationer er nødvendige for at komme i gang. Det er designet omkring konceptet test cases, som er Python-klasser, der nedarves fra frameworkets TestCase-klasse. Unittest er et fremragende værktøj for alle, der begynder deres testrejse, fordi det strukturerer tests på en måde, der afspejler principperne for objektorienteret programmering.

Strukturen af Unittest

I Unittest er hver test en metode inden for en underklasse af unittest.TestCase. Dette design tilskynder til gruppering af relaterede tests, hvilket kan hjælpe med at organisere testkoden logisk og gøre den mere læsbar.

Skrivning af en test med Unittest

Lad os teste en simpel funktion, der beregner gennemsnittet af to tal. Her er funktionen, vi ønsker at teste:

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

Oprettelse af en test case

For at oprette en test case defineres en klasse, der arver fra unittest.TestCase. Inden for denne klasse kan der defineres metoder til at teste funktionen calculate_average.

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)
  • Først import Unittest-modulet, som er en del af Pythons standardbibliotek;
  • class TestCalculateAverage(unittest.TestCase) opretter en ny test case. Den arver fra unittest.TestCase, som leverer testfunktionaliteten;
  • Hver metode i klassen skal starte med test_;
  • Metoderne anvender specifikke assert-udsagn til at kontrollere, om betingelsen er opfyldt.

Eksempel på en vellykket testoutput

Når alle tests består i Unittest, er outputten enkel og angiver, at alle tests blev kørt uden fejl. Her er et eksempel på en vellykket testrun:

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

OK

Eksempel på en fejlet testoutput

Hvis en eller flere tests fejler, vil outputten give detaljer om fejlene, herunder hvilke tests der fejlede og hvorfor. Her er et eksempel på, hvordan det kan se ud, når en test fejler:

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

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

Denne output indeholder:

  • ..F angiver, at tre tests blev kørt; de første to bestod (repræsenteret ved ..), og den tredje fejlede (F);
  • FAILED (failures=1) viser, at der var én fejl blandt de kørte tests;
  • Den detaljerede fejlrapport starter med testidentifikatoren (test_average_floats) og klassen (TestCalculateAverage). Den giver et traceback til linjen i din testkode, der forårsagede fejlen, og forklarer arten af assertionsfejlen, herunder den forventede værdi, den faktiske værdi og den acceptable fejlmargin.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 5. Kapitel 1

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 what the different assert methods in Unittest do?

How do I run these tests from the command line?

What should I do if a test fails?

bookIntroduktion til Unittest i Python: Skrivning af Strukturerede Enhedstests

Stryg for at vise menuen

Unittest er en del af Pythons standardbibliotek, hvilket betyder, at ingen yderligere installationer er nødvendige for at komme i gang. Det er designet omkring konceptet test cases, som er Python-klasser, der nedarves fra frameworkets TestCase-klasse. Unittest er et fremragende værktøj for alle, der begynder deres testrejse, fordi det strukturerer tests på en måde, der afspejler principperne for objektorienteret programmering.

Strukturen af Unittest

I Unittest er hver test en metode inden for en underklasse af unittest.TestCase. Dette design tilskynder til gruppering af relaterede tests, hvilket kan hjælpe med at organisere testkoden logisk og gøre den mere læsbar.

Skrivning af en test med Unittest

Lad os teste en simpel funktion, der beregner gennemsnittet af to tal. Her er funktionen, vi ønsker at teste:

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

Oprettelse af en test case

For at oprette en test case defineres en klasse, der arver fra unittest.TestCase. Inden for denne klasse kan der defineres metoder til at teste funktionen calculate_average.

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)
  • Først import Unittest-modulet, som er en del af Pythons standardbibliotek;
  • class TestCalculateAverage(unittest.TestCase) opretter en ny test case. Den arver fra unittest.TestCase, som leverer testfunktionaliteten;
  • Hver metode i klassen skal starte med test_;
  • Metoderne anvender specifikke assert-udsagn til at kontrollere, om betingelsen er opfyldt.

Eksempel på en vellykket testoutput

Når alle tests består i Unittest, er outputten enkel og angiver, at alle tests blev kørt uden fejl. Her er et eksempel på en vellykket testrun:

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

OK

Eksempel på en fejlet testoutput

Hvis en eller flere tests fejler, vil outputten give detaljer om fejlene, herunder hvilke tests der fejlede og hvorfor. Her er et eksempel på, hvordan det kan se ud, når en test fejler:

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

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

Denne output indeholder:

  • ..F angiver, at tre tests blev kørt; de første to bestod (repræsenteret ved ..), og den tredje fejlede (F);
  • FAILED (failures=1) viser, at der var én fejl blandt de kørte tests;
  • Den detaljerede fejlrapport starter med testidentifikatoren (test_average_floats) og klassen (TestCalculateAverage). Den giver et traceback til linjen i din testkode, der forårsagede fejlen, og forklarer arten af assertionsfejlen, herunder den forventede værdi, den faktiske værdi og den acceptable fejlmargin.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 5. Kapitel 1
some-alt