Jqwik
One teacher asks the question they prepared: "if I give you 5, you tell me 25".
The other states a rule that should hold for every answer, then invents hundreds of questions trying to catch the pupil out. When one fails, it shrinks it to the simplest question the pupil still gets wrong, so you are told "it breaks on 0" rather than "it breaks on -2147483648".
What it is
jqwik is a property-based testing engine that runs on the JUnit platform. Instead of
@Test with fixed inputs, a @Property method declares a rule and jqwik generates inputs
to try to falsify it, then shrinks any failing input to a minimal counterexample.
It is a JUnit platform engine rather than a JUnit Jupiter extension, so it discovers and runs its tests itself. An integration that only hooked into Jupiter would therefore miss every property test.
How Ares 2 uses it
The api/jqwik package mirrors the Jupiter integration for jqwik's own
lifecycle, so a property test gets the same treatment as an ordinary test: the public and
hidden distinction, the deadline check before a hidden property runs, and the active
security policy.
This is why the annotations are duplicated per engine. A test class must import the
jupiter annotations or the jqwik ones to match the engine that runs it;
mixing them silently produces a test that is not supervised.
de.tum.cit.ase.ares.api.jupiter.* for @Test, de.tum.cit.ase.ares.api.jqwik.* for
@Property. This is the single most common integration mistake.
Further reading
- jqwik User Guide — jqwik team
- jqwik-team/jqwik — source repository
- JUnit 5 User Guide — JUnit team