Java Testing
Guidelines for writing tests in Java projects using the Spock Framework and Groovy.
When to use this skill
- Writing new tests
- Reviewing test code
- Setting up test infrastructure
- Configuring Testcontainers
- Mocking dependencies in Spring Boot tests
- When asked to "improve test setup" or "run all tests and fix"
Skill Contents
Sections
- When to use this skill
- Quick Start
- Key Patterns
- Mocking Patterns
- Persistence Testing
- References
- Related Rules
- Related Skills
Available Resources
π references/ - Detailed documentation
- grpc testing
- junit5 migration
- spock patterns
- test setup workflow
- test utilities
- testcontainers setup
Quick Start
1. Test Structure
def "should do Y when X"() {
given:
// create test data
when:
// execute process
then:
// assert output
where: // use test table if suited
}
2. Test Naming
- Test files:
<ClassName>Spec.groovy - Test methods:
"should [expected behavior] when [condition]"
Key Patterns
| Pattern | When to Use | |---------|-------------| | Spock Mock | Unit tests without Spring context | | @SpringBean | Spring integration tests with mocks | | @ServiceConnection | Testcontainers database connection | | InProcessServer | gRPC client/server testing | | Data Tables | Multiple test cases with same structure |
Mocking Patterns
Unit Tests (No Spring)
class SomeSpec extends Specification {
SomeInterface someInterface = Mock()
def "test method"() {
given:
def underTest = new ClassUnderTest(someInterface)
when:
// call method
then:
1 * someInterface.someMethod("value") >> responseClass
}
}
Spring Integration Tests
@SpringBootTest
class SomeSpec extends Specification {
@SpringBean
SomeInterface someInterface = Mock()
def "test method"() {
when:
// call method
then:
1 * someInterface.someMethod(_) >> { throw new RuntimeException() }
}
}
Persistence Testing
Use Testcontainers with @ServiceConnection for database tests:
@Configuration
class IntegrationTestConfiguration {
@Bean
@ServiceConnection
PostgreSQLContainer<?> postgreSQLContainer() {
return new PostgreSQLContainer<>("postgres:14-alpine")
.withDatabaseName("test_db")
}
}
References
| Reference | Description | |-----------|-------------| | references/spock-patterns.md | Advanced Spock patterns | | references/testcontainers-setup.md | Testcontainers configuration | | references/grpc-testing.md | gRPC test patterns |
Related Rules
- java-testing-guidelines - Full testing reference
- java-flyway-migrations - Flyway for test schema
Related Skills
| Skill | Purpose | |-------|---------| | java-coverage | JaCoCo test coverage | | gradle-standards | Test dependency bundles |
<!-- AUTO-GENERATED FILE - DO NOT EDIT DIRECTLY --> <!-- Source: bitsoex/ai-code-instructions β java/skills/java-testing/SKILL.md --> <!-- To modify, edit the source file and run the distribution workflow -->