EMZETT.
Login

Unit-Test (Modultest)

Kurz: Ein Unit-Test prüft automatisch eine kleine, abgegrenzte Einheit des Programms (meist eine Funktion oder Klasse) auf korrektes Verhalten – schnell, isoliert und wiederholbar.

Genauer: Unit-Tests bilden die Basis der Testpyramide: viele schnelle Unit-Tests, weniger Integrationstests, wenige langsame End-to-End-Tests. Sie finden Fehler früh, dokumentieren das erwartete Verhalten und machen Refactoring sicher. In der CI/CD-Pipeline laufen sie bei jeder Änderung.

Im Detail

# rechnen.py
def rabatt(preis, prozent):
    if not 0 <= prozent <= 100:
        raise ValueError("Prozent muss zwischen 0 und 100 liegen")
    return preis * (1 - prozent / 100)
 
# test_rechnen.py  (pytest)
import pytest
from rechnen import rabatt
 
def test_zehn_prozent():
    assert rabatt(200, 10) == 180
 
def test_null_prozent():
    assert rabatt(50, 0) == 50
 
def test_ungueltiger_wert():
    with pytest.raises(ValueError):
        rabatt(100, 120)

Aufbau: Arrange – Act – Assert

  1. Arrange: Testdaten und Objekte vorbereiten.
  2. Act: die zu testende Funktion aufrufen.
  3. Assert: das Ergebnis prüfen.

Gute Unit-Tests sind …

  • schnell (Millisekunden) und unabhängig voneinander
  • deterministisch (kein Zufall, keine echte Uhrzeit, kein Netzwerk)
  • aussagekräftig benannt (test_ungueltiger_wert)
  • auf ein Verhalten konzentriert

Externe Abhängigkeiten ersetzt man durch Attrappen (Mocks, Stubs, Fakes), was durch Dependency Injection erleichtert wird. Frameworks: JUnit (Java), pytest (Python), Jest/Vitest (JavaScript), xUnit (C#), go test (Go), Cargo (Rust). Testen vor dem Programmieren beschreibt TDD.

Siehe auch: TDD, Refactoring, Debugging, CI/CD-Pipeline