Property-Based Testing ist ein Testansatz, der auf QuickCheck von Koen Claessen und John Hughes zurückgeht: Man formuliert Invarianten, die für alle Eingaben gelten sollen, und lässt Generatoren die Testdaten automatisch erzeugen. Schlägt eine Property fehl, reduziert Shrinking den Fall auf seine einfachste Form. So findet der Ansatz Edge Cases, an die niemand gedacht hat, und ergänzt beispielbasierte Unit-Tests.

Property-Based Testing

Details
Auch bekannt als

Generatives Testen, QuickCheck-artiges Testen

Kernkonzepte:

Properties (Eigenschaften)

Invarianten, die immer gelten sollten

Generatoren

Automatische Testdatenerzeugung

Shrinking (Vereinfachung)

Minimierung fehlschlagender Testfälle zur einfachsten Form

Universelle Quantifizierung

Testen "für alle Eingaben"

Spezifikationstesten

Testen von High-Level-Eigenschaften, nicht Beispielen

Edge-Case-Entdeckung

Findet Fälle, an die man nicht gedacht hat

Komplementär zu beispielbasiert

Funktioniert neben traditionellen Unit-Tests

Zustandsbehaftetes Testen

Testen von Operationssequenzen

Modellbasiertes Testen

Implementierung gegen einfacheres Modell vergleichen

Wichtige Werkzeuge

QuickCheck (Haskell), Hypothesis (Python), fast-check (JavaScript), FsCheck (.NET)

Wann zu verwenden:

  • Testen reiner Funktionen und Algorithmen

  • Validierung von Geschäftsregeln und Invarianten

  • Testen von Parsern und Serialisierern

  • Finden von Edge Cases in komplexer Logik

  • Ergänzung zu beispielbasiertem TDD