Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Einführung in Unittest in Python: Strukturierte Unit-Tests Schreiben | Unittest-Framework
Python Fortgeschrittene Konzepte

bookEinführung in Unittest in Python: Strukturierte Unit-Tests Schreiben

Unittest ist Teil der Standardbibliothek von Python, was bedeutet, dass keine zusätzlichen Installationen erforderlich sind, um zu beginnen. Es basiert auf dem Konzept von Testfällen, die Python-Klassen sind, die von der TestCase-Klasse des Frameworks abgeleitet werden. Unittest ist ein ausgezeichnetes Werkzeug für alle, die mit dem Testen beginnen, da es Tests so strukturiert, dass die Prinzipien der objektorientierten Programmierung widergespiegelt werden.

Die Struktur von Unittest

In Unittest ist jeder Test eine Methode innerhalb einer Unterklasse von unittest.TestCase. Dieses Design fördert die Gruppierung verwandter Tests, was dazu beiträgt, den Testcode logisch zu organisieren und die Lesbarkeit zu erhöhen.

Schreiben eines Tests mit Unittest

Es soll eine einfache Funktion getestet werden, die den Durchschnitt von zwei Zahlen berechnet. Hier ist die Funktion, die getestet werden soll:

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

Erstellen eines Testfalls

Um einen Testfall zu erstellen, wird eine Klasse definiert, die von unittest.TestCase erbt. Innerhalb dieser Klasse können Methoden definiert werden, um die Funktion calculate_average zu testen.

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)
  • Zuerst wird das Unittest-Modul mit import geladen, das Teil der Standardbibliothek von Python ist;
  • class TestCalculateAverage(unittest.TestCase) erstellt einen neuen Testfall. Er erbt von unittest.TestCase, das die Testfunktionalität bereitstellt;
  • Jede Methode in der Klasse sollte mit test_ beginnen;
  • Die Methoden verwenden spezifische assert-Anweisungen, um zu überprüfen, ob eine Bedingung erfüllt ist.

Beispiel für eine erfolgreiche Testausgabe

Wenn alle Tests im Unittest erfolgreich sind, ist die Ausgabe übersichtlich und zeigt an, dass alle Tests ohne Fehler ausgeführt wurden. Hier ist ein Beispiel für einen erfolgreichen Testlauf:

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

OK

Beispiel für eine fehlgeschlagene Testausgabe

Wenn ein oder mehrere Tests fehlschlagen, liefert die Ausgabe Details zu den Fehlern, einschließlich der Information, welche Tests fehlgeschlagen sind und warum. Hier ist ein Beispiel, wie eine fehlgeschlagene Testausgabe aussehen kann:

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

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

Diese Ausgabe enthält:

  • ..F zeigt an, dass drei Tests ausgeführt wurden; die ersten beiden bestanden (..), der dritte schlug fehl (F);
  • FAILED (failures=1) zeigt, dass es einen Fehler unter den ausgeführten Tests gab;
  • Der detaillierte Fehlerbericht beginnt mit der Testkennung (test_average_floats) und der Klasse (TestCalculateAverage). Es wird ein Traceback zur fehlerverursachenden Zeile im Testcode angezeigt und die Art des Assertion-Fehlers erläutert, einschließlich des erwarteten Werts, des tatsächlichen Werts und der zulässigen Fehlertoleranz.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 5. Kapitel 1

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

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?

bookEinführung in Unittest in Python: Strukturierte Unit-Tests Schreiben

Swipe um das Menü anzuzeigen

Unittest ist Teil der Standardbibliothek von Python, was bedeutet, dass keine zusätzlichen Installationen erforderlich sind, um zu beginnen. Es basiert auf dem Konzept von Testfällen, die Python-Klassen sind, die von der TestCase-Klasse des Frameworks abgeleitet werden. Unittest ist ein ausgezeichnetes Werkzeug für alle, die mit dem Testen beginnen, da es Tests so strukturiert, dass die Prinzipien der objektorientierten Programmierung widergespiegelt werden.

Die Struktur von Unittest

In Unittest ist jeder Test eine Methode innerhalb einer Unterklasse von unittest.TestCase. Dieses Design fördert die Gruppierung verwandter Tests, was dazu beiträgt, den Testcode logisch zu organisieren und die Lesbarkeit zu erhöhen.

Schreiben eines Tests mit Unittest

Es soll eine einfache Funktion getestet werden, die den Durchschnitt von zwei Zahlen berechnet. Hier ist die Funktion, die getestet werden soll:

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

Erstellen eines Testfalls

Um einen Testfall zu erstellen, wird eine Klasse definiert, die von unittest.TestCase erbt. Innerhalb dieser Klasse können Methoden definiert werden, um die Funktion calculate_average zu testen.

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)
  • Zuerst wird das Unittest-Modul mit import geladen, das Teil der Standardbibliothek von Python ist;
  • class TestCalculateAverage(unittest.TestCase) erstellt einen neuen Testfall. Er erbt von unittest.TestCase, das die Testfunktionalität bereitstellt;
  • Jede Methode in der Klasse sollte mit test_ beginnen;
  • Die Methoden verwenden spezifische assert-Anweisungen, um zu überprüfen, ob eine Bedingung erfüllt ist.

Beispiel für eine erfolgreiche Testausgabe

Wenn alle Tests im Unittest erfolgreich sind, ist die Ausgabe übersichtlich und zeigt an, dass alle Tests ohne Fehler ausgeführt wurden. Hier ist ein Beispiel für einen erfolgreichen Testlauf:

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

OK

Beispiel für eine fehlgeschlagene Testausgabe

Wenn ein oder mehrere Tests fehlschlagen, liefert die Ausgabe Details zu den Fehlern, einschließlich der Information, welche Tests fehlgeschlagen sind und warum. Hier ist ein Beispiel, wie eine fehlgeschlagene Testausgabe aussehen kann:

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

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

Diese Ausgabe enthält:

  • ..F zeigt an, dass drei Tests ausgeführt wurden; die ersten beiden bestanden (..), der dritte schlug fehl (F);
  • FAILED (failures=1) zeigt, dass es einen Fehler unter den ausgeführten Tests gab;
  • Der detaillierte Fehlerbericht beginnt mit der Testkennung (test_average_floats) und der Klasse (TestCalculateAverage). Es wird ein Traceback zur fehlerverursachenden Zeile im Testcode angezeigt und die Art des Assertion-Fehlers erläutert, einschließlich des erwarteten Werts, des tatsächlichen Werts und der zulässigen Fehlertoleranz.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 5. Kapitel 1
some-alt