UnitTest – integrierter Python-Tester

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung in das Testen mit unittest

Testen ist ein fundamentaler Bestandteil der Softwareentwicklung, der die Zuverlässigkeit und Qualität des Codes sicherstellt. Im Python-Ökosystem ist das Modul unittest die Standardlösung zum Erstellen und Ausführen automatisierter Tests.

UnitTest ist eine integrierte Python-Bibliothek, die auf der xUnit-Architektur basiert. Sie bietet Entwicklern ein vollständiges Werkzeugset zum Erstellen von Modultests, zur Überprüfung der Geschäftslogik und zur Kontrolle von Funktionen und Klassen. Der größte Vorteil von unittest ist, dass es Teil der Python-Standardbibliothek ist und keine zusätzliche Installation erfordert.

Was ist unittest und warum wird es benötigt?

Unittest ist ein Framework zum Schreiben und Ausführen von Tests in Python, das den Prinzipien der testgetriebenen Entwicklung (TDD) folgt. Es ermöglicht die Erstellung wiederholbarer, isolierter und automatisierter Tests, die dabei helfen:

  • Fehler frühzeitig im Entwicklungsprozess zu erkennen
  • Die Stabilität des Codes bei Refactoring zu gewährleisten
  • Das erwartete Verhalten von Funktionen zu dokumentieren
  • Das Vertrauen in die Qualität des Softwareprodukts zu stärken

Grundlagen der Arbeit mit unittest

Grundlegende Teststruktur

Um mit unittest zu beginnen, muss das Modul importiert und eine Testklasse erstellt werden:

import unittest

class TestMath(unittest.TestCase):
    def test_add(self):
        self.assertEqual(2 + 3, 5)
        
    def test_multiply(self):
        self.assertEqual(4 * 5, 20)

if __name__ == '__main__':
    unittest.main()

Wichtige Strukturprinzipien

Jede Testklasse muss von unittest.TestCase erben. Alle Testmethoden beginnen mit dem Präfix test_, damit das Framework die Tests automatisch erkennen und ausführen kann. Die Methode unittest.main() startet alle gefundenen Tests im aktuellen Modul.

Testlebenszyklus und Test-Fixuren

Setup- und Teardown-Methoden

Unittest bietet spezielle Methoden zur Vorbereitung und Bereinigung der Testumgebung:

class TestDatabase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        """Wird einmal vor allen Tests der Klasse ausgeführt"""
        cls.db_connection = create_test_database()
    
    @classmethod
    def tearDownClass(cls):
        """Wird einmal nach allen Tests der Klasse ausgeführt"""
        cls.db_connection.close()
    
    def setUp(self):
        """Wird vor jedem Test ausgeführt"""
        self.test_data = ["item1", "item2", "item3"]
    
    def tearDown(self):
        """Wird nach jedem Test ausgeführt"""
        self.test_data.clear()

Fixuren-Ebenen

Fixuren in unittest arbeiten auf verschiedenen Ebenen:

  • setUp() und tearDown() – für jeden Test einzeln
  • setUpClass() und tearDownClass() – für die gesamte Testklasse
  • setUpModule() und tearDownModule() – für das gesamte Modul

Assertions-Methoden

Wichtige Prüfmethoden

Unittest bietet eine Vielzahl von Methoden für verschiedene Prüfarten:

Methode Beschreibung Anwendungsbeispiel
assertEqual(a, b) Prüft Gleichheit von a und b self.assertEqual(2+2, 4)
assertNotEqual(a, b) Prüft Ungleichheit von a und b self.assertNotEqual(2+2, 5)
assertTrue(x) Prüft, ob x wahr ist self.assertTrue(5 > 3)
assertFalse(x) Prüft, ob x falsch ist self.assertFalse(5 < 3)

Empfehlungen