A curated list of property-based testing resources.

This list is intended as a "seminal overview". If one were to read every linked resource, they would be a well-rounded property-based testing expert, with knowledge of all the important ideas.

Libraries

Python
Rust
JavaScript / TypeScript
Haskell
QuickChecknoteThe first recognizable PBT library. See also the paper QuickCheck: A Lightweight Tool for Random Testing of Haskell Programs.
SmallChecknoteExhaustively enumerates its search space, incrementally expanding in size. See also the paper Smallcheck and lazy smallcheck: automatic exhaustive testing for small values.
Java
.NET
Erlang
Scala
Clojure
Rocq
Elm

Posts

Discussions of recurring themes in property-based testing.

Tutorials

Introductory material and property-based testing tutorials.

Generation

Can we do better than sampling test cases uniformly at random? Yes; this section discusses various techniques for doing so. Many are adjacent to, or framed as part of, the fuzzing literature.

Shrinking

Shrinking (also known as minimization or test-case reduction) takes a complex failure and shrinks it to a simpler one. This eases debugging, among other things. Shrinking is an important and sometimes overlooked part of property-based testing.

Test synthesis

Not satisfied with automating the generation of test cases through property-based testing, this section explores automating the process of writing property-based tests themselves.

Tools

Empirical results

Datasets and research on how developers practically interact with property-based testing.

Other lists

Want to read more? Here are some additional lists of resources.