CheckOps home

Tools directory

J

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.

Visit website

Latest public signals

Not refreshed yet. Refresh reads the public site and, when the entry has a GitHub repository, the latest release.

Visit Website

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

  1. JUnit Platform engine: Runs alongside JUnit 5 tests in any IDE or build.
  2. Constraint annotations: Shape inputs with @IntRange, @StringLength and more.
  3. Shrinking and seeds: Minimal counterexamples and reproducible failures.
  4. Stateful testing: Generate action sequences against stateful objects.

Pros

  1. Free to use: Open source under the EPL-2.0 licence, so the core tool costs nothing to use.
  2. Actively maintained: The repository had commits as recent as 9 November 2026.

Cons

  1. Smaller community: Fewer examples than JUnit or Mockito.
  2. Writing good properties takes practice.: Weak properties add runtime without value.
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.

  1. Java and Kotlin teams on JUnit 5 wanting property-based testing.
  2. 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.