EMZETT.
Login

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