| name | java-testing |
| description | Java testing guidelines using Spock Framework and Groovy. Covers test structure, mocking patterns, persistence testing with Testcontainers, gRPC testing, and Spring Boot test configurations. Use when writing or reviewing tests.
|
| compatibility | Java projects using Spock Framework |
| metadata | {"version":"2.0.0","technology":"java","category":"testing","tags":["java","testing","spock","groovy","testcontainers"]} |
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
Available Resources
📚 references/ - Detailed documentation
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
Related Rules
Related Skills