CheckOps
jqwik
jqwik is an EPL-2.0 property-based testing engine for the JUnit Platform, letting Java and Kotlin developers write properties with generated, shrinking inputs alongside regular JUnit 5 tests.
Latest public signals
Not refreshed yet. Refresh reads the public site and, when the entry has a GitHub repository, the latest release.
Introduction
jqwik (pronounced “jay-quick”) is a property-based testing library for the JVM, implemented as a test engine for the JUnit Platform. That means jqwik properties run in the same Gradle or Maven build, IDE and reports as your JUnit 5 tests, with no separate runner.
Properties are methods annotated with @Property whose parameters are annotated with @ForAll. jqwik generates many input combinations, using sensible defaults for common types and constraints such as @IntRange, @StringLength or @Positive. Custom generators are built with Arbitraries and @Provide methods. When a property fails, jqwik shrinks the input to a minimal counterexample and reports the seed for reproduction. Advanced features include stateful (action sequence) testing, statistics collection, edge-case generation, and lifecycle hooks; a Kotlin module adds idiomatic support. Version 1.10.2 was released on 10 October 2026.
The source code is at jqwik-team/jqwik on GitHub under the EPL-2.0 licence, with about 857 stars; the most recent commit was on 9 November 2026.
Features
- JUnit Platform engine: Runs alongside JUnit 5 tests in any IDE or build.
- Constraint annotations: Shape inputs with
@IntRange,@StringLengthand more. - Shrinking and seeds: Minimal counterexamples and reproducible failures.
- Stateful testing: Generate action sequences against stateful objects.
Pros
- Free to use: Open source under the EPL-2.0 licence, so the core tool costs nothing to use.
- Actively maintained: The repository had commits as recent as 9 November 2026.
Cons
- Smaller community: Fewer examples than JUnit or Mockito.
- Writing good properties takes practice.: Weak properties add runtime without value.
Usage and Links (Example)
testImplementation("net.jqwik:jqwik:<version>")
import net.jqwik.api.*;
import net.jqwik.api.constraints.*;
class PricingProperties {
@Property
void discountNeverIncreasesPrice(@ForAll @IntRange(min = 0, max = 10_000) int price,
@ForAll @IntRange(min = 0, max = 100) int pct) {
Assertions.assertThat(Pricing.apply(price, pct)).isLessThanOrEqualTo(price);
}
@Property
boolean reverseTwiceIsIdentity(@ForAll List<Integer> list) {
return reverse(reverse(list)).equals(list);
}
}
Resources:
Pricing
jqwik is free and open source under the EPL-2.0 licence.
Recommended for?
- Java and Kotlin teams on JUnit 5 wanting property-based testing.
- Domain logic and parsers with many edge cases.
Conclusion
jqwik brings mature property-based testing to the JVM while fitting seamlessly into JUnit 5 builds and IDEs.
Alternatives
Other tools on CheckOps that cover similar ground. Open a page, or compare one with jqwik side by side.
JJUnit 5JUnit 5 is the current JUnit for Java and the JVM: Jupiter for new tests, Platform to launch them, Vintage to run JUnit 4.Compare with jqwik
KKotestKotest is an Apache-2.0 Kotlin multiplatform test framework with multiple testing styles, a large assertions library and built-in property-based testing.Compare with jqwik
HHypothesisHypothesis is the MPL-2.0 property-based testing library for Python: describe the range of inputs, let it generate cases including edge cases, and get the simplest failing example when a property breaks.Compare with jqwik
Ffast-checkfast-check is an MIT-licensed property-based testing framework for JavaScript and TypeScript, with rich arbitraries, shrinking, replayable seeds, model-based testing and race-condition detection.Compare with jqwik
AAssertJAssertJ is an Apache-2.0 fluent assertions library for Java, with rich, discoverable assertions for core types, collections, exceptions, dates and more, plus soft assertions and custom assertion generation.Compare with jqwik
PPIT (Pitest)PIT (Pitest) is an Apache-2.0 state-of-the-art mutation testing system for Java and the JVM that mutates bytecode to measure how well your tests detect faults, with Maven and Gradle plugins and HTML reports.Compare with jqwik