---
name: junit-core
description: JUnit 5 core testing patterns with AAA structure, test organization, and coverage standards
user-invocable: false
allowed-tools: Read, Grep, Glob
---

# JUnit Core Skill

**REFERENCE MODE**: This skill provides reference material. Load specific standards on-demand based on current task.

JUnit 5 testing standards for general Java projects. This skill covers test structure, naming conventions, coverage requirements, and the AAA (Arrange-Act-Assert) pattern.

## Prerequisites

This skill applies to Java projects using JUnit 5:
- `org.junit.jupiter:junit-jupiter` (JUnit 5)

## Workflow

### Step 1: Load Core Testing Standards

**CRITICAL**: Load this standard for any testing work.

```
Read: standards/testing-junit-core.md
```

This provides foundational rules for:
- Test class requirements (1:1 mapping with production classes)
- AAA pattern (Arrange-Act-Assert)
- Coverage requirements (80% line/branch minimum)
- @DisplayName usage

### Step 2: Load Coverage Analysis (As Needed)

**Coverage Analysis** (load for coverage work):
```
Read: standards/coverage-analysis-pattern.md
```

Use when: Analyzing test coverage or improving coverage metrics.

## Key Rules Summary

### Test Class Requirements
```java
// CORRECT - One test class per production class
// TokenValidator.java → TokenValidatorTest.java
// UserService.java → UserServiceTest.java
```

### AAA Pattern (Arrange-Act-Assert)
```java
@Test
@DisplayName("Should validate token with correct issuer")
void shouldValidateTokenWithCorrectIssuer() {
    // Arrange
    String issuer = "https://example.com";
    Token token = createTokenWithIssuer(issuer);

    // Act
    ValidationResult result = validator.validate(token);

    // Assert
    assertTrue(result.isValid());
    assertEquals(issuer, result.getIssuer());
}
```

### DisplayName Annotations
```java
// CORRECT - Descriptive test names
@Test
@DisplayName("Should throw exception when token is null")
void shouldThrowExceptionWhenTokenIsNull() { }

@Test
@DisplayName("Should return empty when no users found")
void shouldReturnEmptyWhenNoUsersFound() { }
```

### Coverage Requirements
- Minimum 80% line coverage
- Minimum 80% branch coverage
- Critical paths: 100% coverage
- All public APIs must be tested

## Related Skills

- `pm-dev-java:junit-integration` - Maven integration testing
- `pm-dev-java-cui:cui-testing` - CUI test generator framework
- `pm-dev-java:java-core` - Core Java patterns

## Standards Reference

| Standard | Purpose |
|----------|---------|
| testing-junit-core.md | Test structure, AAA pattern, naming |
| coverage-analysis-pattern.md | Coverage analysis and improvement |
