Property-Based Testing Tools
Alternatives to Racket QuickCheck
{"intro": "Racket QuickCheck lets Racket programmers express properties in ordinary Racket code and check them against randomly generated inputs. Its built-in generators cover integers, real numbers, characters, lists, vectors, strings, and symbols, while custom generators support domain-specific data. A failed property reports the arguments that falsified it, and RackUnit integration raises a RackUnit exception with test details. Runs default to 100 successful tests, with helpers for 1,000, 10,000, or custom counts. The free package runs on Linux, macOS, and Windows, but requires Racket 6.0 or newer and installation through Racket’s package tools.\n\nReaders may switch for another programming language, automatic failure shrinking, broader test-runner integration, asynchronous checks, or stateful testing. QuickCheck does not shrink failing cases, and its workflow remains tied to the Racket runtime and RackUnit ecosystem. Compare each alternative’s language, generator controls, counterexample handling, runner integrations, platform coverage, and any asynchronous or stateful features. The better choice depends on whether your existing code and test workflow fit Racket or another ecosystem more closely.", "rows": [{"ref": "sw:scalacheck", "name": "ScalaCheck", "best_for": "Scala and Java property testing", "pricing": "Free plan", "key_difference": "ScalaCheck targets Scala and Java, integrates with several Scala test frameworks, and can run standalone instead of using Racket and RackUnit.", "choose_when": "Choose it when your properties live in Scala or Java and sbt, ScalaTest, specs2, or LambdaTest fit your workflow."}, {"ref": "sw:fscheck", "name": "FsCheck", "best_for": ".NET properties in F#, C#, or VB", "pricing": "Free plan", "key_difference": "FsCheck supports F#, C#, and VB, provides minimal counterexamples with shrinkers, and integrates with .NET runners rather than Racket.", "choose_when": "Choose it when .NET language support, minimal counterexamples, or xUnit.net and NUnit integration matter more than Racket compatibility."}, {"ref": "sw:gopter", "name": "Gopter", "best_for": "Go property and stateful testing", "pricing": "Free plan", "key_difference": "Gopter brings ScalaCheck-style testing to Go with tighter generator control, automatic shrinking, regex generators, and stateful tests.", "choose_when": "Choose it when Go code needs stateful tests, regex-generated values, or minimum-value shrinking unavailable in Racket QuickCheck."}, {"ref": "sw:jsverify", "name": "JSVerify", "best_for": "JavaScript properties, including async functions", "pricing": "Free plan", "key_difference": "JSVerify targets JavaScript, supports Promise-returning properties, framework-agnostic runners, shrinking, and deterministic random states.", "choose_when": "Choose it when JavaScript or asynchronous properties and integration with Mocha, nodeunit, or Jasmine are central."}, {"ref": "sw:hypothesis-property-based-testing-tool", "name": "Hypothesis", "best_for": "Python testing with replayable failures", "pricing": "Free plan", "key_difference": "Hypothesis targets Python, simplifies failures, stores examples for replay, and generates state-machine operation sequences inside existing test frameworks.", "choose_when": "Choose it when Python, replayable failures, stateful testing, or pytest and unittest integration outweighs having a standalone runner."}, {"ref": "sw:propcheck", "name": "PropCheck", "best_for": "Ruby property testing with RSpec or MiniTest", "pricing": "Free plan", "key_difference": "PropCheck targets Ruby, shrinks failures, offers Ruby-specific generators and setup hooks, and requires no external dependencies.", "choose_when": "Choose it when Ruby projects need custom generators, lifecycle hooks, shrinking, or RSpec, MiniTest, test-unit, and vanilla Ruby usage."}, {"ref": "sw:qcheck", "name": "QCheck", "best_for": "OCaml property testing with integrated shrinking", "pricing": "Free plan", "key_difference": "QCheck targets OCaml, integrates with OUnit and Alcotest, includes built-in shrinking, and offers sequential and parallel model-based testing.", "choose_when": "Choose it when OCaml packages, integrated shrinkers, or model-based concurrency testing fit your project better than Racket."}]}
- 01
fast-check It suits JavaScript and TypeScript developers who want to check behavior across generated inputs, including teams using different test runners.
Free plan Open source Web · Linux · API · Self-hosted8.9 Visit Specs - 02 Gopter
Gopter suits Go developers who want property-based testing, generator control, shrinking, or stateful tests.
Free plan Linux · Self-hosted8.6 Visit Specs - 03 FsCheck
FsCheck suits developers who want generated-input property checks for .NET programs, with properties written in F#, C# or VB.
Free plan Windows · macOS · Linux8.4 Visit Specs - 04 JSVerify
It suits JavaScript developers who want generated inputs to check function properties, including asynchronous ones.
Free plan Web · Self-hosted8.1 Visit Specs - 05 CsCheck
CsCheck suits C# developers who want generated, shrinkable tests, including stateful or concurrent testing.
Free plan Self-hosted8.0 Visit Specs - 06 PropCheck
PropCheck suits Ruby developers who want to check assertions across generated inputs using RSpec, MiniTest, test-unit or vanilla Ruby.
Free plan Linux · Self-hosted8.0 Visit Specs - 07 ScalaCheck
It suits Scala and Java developers who want to check program properties against randomized inputs.
Free plan Windows · macOS · Linux8.0 Visit Specs - 08 QCheck
It suits OCaml developers who want to check properties over generated inputs, including teams using OUnit or Alcotest.
Free plan Linux7.9 Visit Specs - 09 QuickTheories
QuickTheories suits Java developers testing broad properties and invariants rather than only hand-written examples.
Free plan API · Self-hosted7.7 Visit Specs - 10 Scala Hedgehog
Scala developers who want property-based tests, including tests of stateful systems, may find Scala Hedgehog relevant.
Free plan Linux7.7 Visit Specs - 11 Eris Self-hosted7.6 Visit Specs
- 12 FSharp.Hedgehog Windows · macOS · Linux7.5 Visit Specs
- 13 PropEr
PropEr suits Erlang developers testing pure functions, library modules, and stateful code.
Free plan Self-hosted7.5 Visit Specs - 14 Hypothesis
Hypothesis suits Python developers who want tests to explore inputs and edge cases based on described behavior.
Windows · macOS · Linux7.4 Visit Specs - 15 QuickCheck
QuickCheck suits Haskell developers who want to check properties across generated inputs, including stateful or monadic properties.
Free plan Linux7.3 Visit Specs - 16 Rantly Free plan Self-hosted7.3 Visit Specs
- 17 Rapid Free plan Self-hosted7.1 Visit Specs
- 18
jqwik 7.0 Visit Specs - 19 Proptest Web7.0 Visit Specs
- 20 RapidCheck Windows · Linux · Self-hosted7.0 Visit Specs
- 21 scalaprops
Scalaprops suits Scala developers writing property-based tests, law checks, or Scalaz-integrated tests.
Free plan Linux7.0 Visit Specs - 22 StreamData Free plan API7.0 Visit Specs
- 23 test.check Free plan API6.9 Visit Specs
- 24 Plausible 6.5 Visit Specs
- 25 QuickCheck 6.5 Visit Specs
- 26 SwiftCheck macOS · iOS6.5 Visit Specs
- 27 SmallCheck 5.1 Visit Specs
Racket QuickCheck, head to head
- Racket QuickCheck vs fast-check
- Racket QuickCheck vs Gopter
- Racket QuickCheck vs FsCheck
- Racket QuickCheck vs JSVerify
- Racket QuickCheck vs CsCheck
- Racket QuickCheck vs PropCheck
- Racket QuickCheck vs ScalaCheck
- Racket QuickCheck vs QCheck
- Racket QuickCheck vs QuickTheories
- Racket QuickCheck vs Scala Hedgehog
- Racket QuickCheck vs Eris
- Racket QuickCheck vs FSharp.Hedgehog