Agent Skills: Java Testing Standards

Testing standards using JUnit 5, AssertJ, and Mockito for Java. Use when writing or reviewing Java unit tests, setting up parameterized tests, writing integration tests with Testcontainers, or working with Mockito mocks. (triggers: **/*Test.java, **/*IT.java, @Test, @ParameterizedTest, Mockito, AssertJ, assertThat, JUnit, Testcontainers)

UncategorizedID: hoangnguyen0403/agent-skills-standard/java-testing

Install this agent skill to your local

pnpm dlx add-skill https://github.com/HoangNguyen0403/agent-skills-standard/tree/HEAD/skills/java/java-testing

Skill Files

Browse the full folder contents for java-testing.

Download Skill

Loading file tree…

skills/java/java-testing/SKILL.md

Skill Metadata

Name
java-testing
Description
'Testing standards using JUnit 5, AssertJ, and Mockito for Java. Use when writing or reviewing Java unit tests, setting up parameterized tests, writing integration tests with Testcontainers, or working with Mockito mocks. (triggers: **/*Test.java, **/*IT.java, @Test, @ParameterizedTest, Mockito, AssertJ, assertThat, JUnit, Testcontainers)'

Java Testing Standards

Priority: P0 (CRITICAL)

High-reliability testing using JUnit 5 and fluent assertions.

Implementation Guidelines

  • JUnit 5 (Jupiter): Use @Test, @BeforeEach, and @AfterEach. Avoid JUnit 4 classes.
  • Fluent Assertions: Use AssertJ (assertThat) over JUnit assertEquals — enhanced readability.
  • Naming: Use MethodName_State_Result or @DisplayName("Check if X when Y").
  • Parameterized Tests: Use @ParameterizedTest with @ValueSource, @CsvSource, or @MethodSource.
  • Mocking Strategy: Use Mockito with @ExtendWith(MockitoExtension.class) (JUnit 5). Use @Mock, @Spy, and @InjectMocks. NEVER mock data-only Records.
  • Integration Testing: Use Testcontainers with @Container annotation for real databases (PostgreSQL/Redis) in integration tests (*IT.java).
  • Isolation: Each test method MUST be isolated and independent; use @DirtiesContext sparingly.
  • AssertJ Chaining: Chain assertions for clarity: assertThat(result).isNotNull().hasSize(2).contains("X").
  • Mocking verification: Use verify(mock, times(1)).method() to audit side-effects.
  • Exceptions: Use assertThatThrownBy(() -> ...) to verify specific Exception types and messages.

Anti-Patterns

  • No Logic in Tests: Keep tests declarative; no loops or if/else branching.
  • No System.out in Tests: Use assertions; never print to stdout.
  • No Legacy Assertions: Use assertThat(a).isEqualTo(b), not assertTrue(a == b).
  • No Shared State: Tests must be isolated and order-independent.

References