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