Property-based Testing
Man schreibt Invarianten (Eigenschaften, die für jede Eingabe gelten sollen) — die Bibliothek generiert Hunderte Zufallseingaben und versucht, sie zu brechen.
Erfunden mit QuickCheck für Haskell (Claessen & Hughes, 1999). Klassische Beispiele: reverse(reverse(xs)) == xs, sort(xs).length == xs.length, encode(decode(x)) == x. Schlägt ein Test fehl, reduziert Shrinking die Eingabe auf den kleinstmöglichen Reproducer.
Beliebte Bibliotheken: Hypothesis (Python), fast-check (JS), proptest (Rust), ScalaCheck, jqwik. Findet Bugs, die handgeschriebene Unit-Tests übersehen, besonders Edge Cases (leere Liste, negative Zahlen, Unicode). Kein Ersatz für beispielbasierte Tests — eine Ergänzung dazu.