Java Unit testing guidelines
Review and improve Java unit tests using modern JUnit 5, AssertJ, and Mockito best practices.
What is covered in this Skill?
- JUnit 5 annotations:
@Test, @BeforeEach, @AfterEach, @DisplayName, @Nested, @ParameterizedTest
- AssertJ fluent assertions:
assertThat, assertThatThrownBy
- Given-When-Then test structure, descriptive test naming, single-responsibility tests
- Test independence and isolated state
- Parameterized tests:
@ValueSource/@CsvSource/@MethodSource
- Mockito dependency mocking:
@Mock, @InjectMocks, MockitoExtension
- Code coverage guidance (JaCoCo), package-private test visibility
- Testing anti-patterns: reflection, shared state, hard-coded values, testing implementation details
- Error handling:
assertThatThrownBy, exception messages
- JSpecify null-safety:
@NullMarked, @Nullable
- RIGHT-BICEP coverage principles, A-TRIP test quality, CORRECT boundary condition verification
Scope: The reference is organized by examples (good/bad code patterns) for each core area. Apply recommendations based on applicable examples.
Constraints
Before applying any unit test changes, ensure the project compiles. If compilation fails, stop immediately — do not proceed until resolved. After applying improvements, run full verification.
- MANDATORY: Run
./mvnw compile or mvn compile before applying any change
- SAFETY: If compilation fails, stop immediately and do not proceed — compilation failure is a blocking condition
- VERIFY: Run
./mvnw clean verify or mvn clean verify after applying improvements
- BEFORE APPLYING: Read the reference for detailed examples, good/bad patterns, and constraints
When to use this skill
- Review Java code for unit tests
- Apply best practices for unit tests in Java code
Workflow
- Compile project before unit-test changes
Run ./mvnw compile or mvn compile and stop immediately if compilation fails.
- Read unit-testing reference and evaluate coverage
Read references/131-java-testing-unit-testing.md and identify modernization and quality gaps in current tests.
- Apply unit-testing best practices
Implement or refactor tests using JUnit 5, AssertJ, Mockito, parameterization, and stronger boundary checks.
- Verify with full build
Run ./mvnw clean verify or mvn clean verify after applying improvements.
Reference
For detailed guidance, examples, and constraints, see references/131-java-testing-unit-testing.md.
1---2name: 131-java-testing-unit-testing3description: Use when you need to review, improve, or write Java unit tests — including migrating from JUnit 4 to JUnit 5, adopting AssertJ for fluent assertions, structuring tests with Given-When-Then, ensuring test independence, applying parameterized tests, mocking dependencies with Mockito, verifying boundary conditions (RIGHT-BICEP, CORRECT, A-TRIP), leveraging JSpecify null-safety annotations, or eliminating testing anti-patterns such as reflection-based tests or shared mutable state. This should trigger for requests such as Review Java code for unit tests; Apply best practices for unit tests in Java code. Part of cursor-rules-java project4license: Apache-2.05---6# Java Unit testing guidelines
7
8Review and improve Java unit tests using modern JUnit 5, AssertJ, and Mockito best practices.
9
10**What is covered in this Skill?**
11
12- JUnit 5 annotations: `@Test`, `@BeforeEach`, `@AfterEach`, `@DisplayName`, `@Nested`, `@ParameterizedTest`
13- AssertJ fluent assertions: `assertThat`, `assertThatThrownBy`
14- Given-When-Then test structure, descriptive test naming, single-responsibility tests
15- Test independence and isolated state
16- Parameterized tests: `@ValueSource`/`@CsvSource`/`@MethodSource`
17- Mockito dependency mocking: `@Mock`, `@InjectMocks`, `MockitoExtension`
18- Code coverage guidance (JaCoCo), package-private test visibility
19- Testing anti-patterns: reflection, shared state, hard-coded values, testing implementation details
20- Error handling: `assertThatThrownBy`, exception messages
21- JSpecify null-safety: `@NullMarked`, `@Nullable`
22- RIGHT-BICEP coverage principles, A-TRIP test quality, CORRECT boundary condition verification
23
24**Scope:** The reference is organized by examples (good/bad code patterns) for each core area. Apply recommendations based on applicable examples.
25
26## Constraints
27
28Before applying any unit test changes, ensure the project compiles. If compilation fails, stop immediately — do not proceed until resolved. After applying improvements, run full verification.
29
30- **MANDATORY**: Run `./mvnw compile` or `mvn compile` before applying any change
31- **SAFETY**: If compilation fails, stop immediately and do not proceed — compilation failure is a blocking condition
32- **VERIFY**: Run `./mvnw clean verify` or `mvn clean verify` after applying improvements
33- **BEFORE APPLYING**: Read the reference for detailed examples, good/bad patterns, and constraints
34
35## When to use this skill
36
37- Review Java code for unit tests
38- Apply best practices for unit tests in Java code
39
40## Workflow
41
421. **Compile project before unit-test changes**
43
44Run `./mvnw compile` or `mvn compile` and stop immediately if compilation fails.
45
462. **Read unit-testing reference and evaluate coverage**
47
48Read `references/131-java-testing-unit-testing.md` and identify modernization and quality gaps in current tests.
49
503. **Apply unit-testing best practices**
51
52Implement or refactor tests using JUnit 5, AssertJ, Mockito, parameterization, and stronger boundary checks.
53
544. **Verify with full build**
55
56Run `./mvnw clean verify` or `mvn clean verify` after applying improvements.
57
58## Reference
59
60For detailed guidance, examples, and constraints, see [references/131-java-testing-unit-testing.md](references/131-java-testing-unit-testing.md).