Testy oparte na właściwościach
Piszesz niezmienniki (właściwości, które powinny zachodzić dla każdego wejścia), a biblioteka generuje setki losowych danych i próbuje je złamać.
Wynalezione w QuickCheck dla Haskella (Claessen i Hughes, 1999). Klasyczne przykłady: reverse(reverse(xs)) == xs, sort(xs).length == xs.length, encode(decode(x)) == x. Gdy test padnie, shrinking zmniejsza dane do najmniejszego przykładu odtwarzającego błąd.
Popularne biblioteki: Hypothesis (Python), fast-check (JS), proptest (Rust), ScalaCheck, jqwik. Znajdują błędy, które umykają ręcznie pisanym testom jednostkowym, zwłaszcza w przypadkach brzegowych (pusta lista, liczby ujemne, unicode). Nie zastępują testów opartych na przykładach — uzupełniają je.