Property-Based Testing
Kurz: Beim Property-Based Testing formuliert man Eigenschaften, die immer gelten müssen, und das Testwerkzeug probiert sie mit vielen zufälligen Eingaben aus.
Genauer: Statt „sortiere([3,1,2]) ergibt [1,2,3]” prüft man „das Ergebnis ist sortiert und hat dieselben Elemente wie die Eingabe”. Das Werkzeug erzeugt Hunderte Eingaben und sucht Gegenbeispiele.
Im Detail
- Schrumpfen (Shrinking): Findet es einen Fehler, verkleinert es die Eingabe auf das kleinste Beispiel, das noch scheitert.
- Gute Eigenschaften: Umkehrbarkeit (
decode(encode(x)) == x), Idempotenz, Invarianten (Länge bleibt gleich), Vergleich mit einer einfachen Referenz. - Werkzeuge: Hypothesis (Python), fast-check (JavaScript), QuickCheck (Haskell), jqwik (Java).
- Vorteil: Findet Randfälle, an die man nicht gedacht hat (leere Eingaben, riesige Zahlen, Sonderzeichen).
- Ergänzung: Ersetzt normale Beispieltests nicht, sondern ergänzt sie.
Siehe auch: Mutation Testing