| name | spring-boot-testing |
| description | Spring Boot 4 testing strategies and patterns. Use when writing unit tests, slice tests (@WebMvcTest, @DataJpaTest), integration tests, Testcontainers with @ServiceConnection, security testing (@WithMockUser, JWT), or Modulith event testing with Scenario API. Covers the critical @MockitoBean migration from @MockBean. |
Spring Boot 4 Testing
Comprehensive testing patterns including slice tests, Testcontainers, security testing, and Modulith Scenario API.
Critical Breaking Change
| Old (Boot 3.x) |
New (Boot 4.x) |
Notes |
@MockBean |
@MockitoBean |
Required migration |
@SpyBean |
@MockitoSpyBean |
Required migration |
Implicit @AutoConfigureMockMvc |
Explicit annotation required |
Add to @SpringBootTest |
Test Annotation Selection
| Test Type |
Annotation |
Use When |
| Controller |
@WebMvcTest |
Testing request/response, validation |
| Repository |
@DataJpaTest |
Testing queries, entity mapping |
| JSON |
@JsonTest |
Testing serialization/deserialization |
| REST Client |
@RestClientTest |
Testing external API clients |
| Full Integration |
@SpringBootTest |
End-to-end, with real dependencies |
| Module |
@ApplicationModuleTest |
Testing bounded context in isolation |
Core Workflow
- Choose test slice → Minimal context for fast tests
- Mock dependencies →
@MockitoBean for external services
- Use Testcontainers →
@ServiceConnection for databases
- Assert thoroughly → Use AssertJ, MockMvcTester, WebTestClient
- Test security →
@WithMockUser, JWT mocking
Quick Patterns
See EXAMPLES.md for complete working examples including:
- @WebMvcTest with
MockMvcTester and @MockitoBean (Java + Kotlin)
- @DataJpaTest with
TestEntityManager for lazy loading verification
- Testcontainers with
@ServiceConnection for PostgreSQL/Redis
- Security Testing with
@WithMockUser for role-based access
- Modulith Event Testing with
Scenario API
Detailed References
Anti-Pattern Checklist
| Anti-Pattern |
Fix |
Using @MockBean in Boot 4 |
Replace with @MockitoBean |
@SpringBootTest for unit tests |
Use appropriate slice annotation |
Missing entityManager.clear() |
Add to verify lazy loading |
| High-cardinality test data |
Use minimal, focused fixtures |
| Shared mutable test state |
Use @DirtiesContext or fresh containers |
| No security tests |
Add @WithMockUser tests for endpoints |
Critical Reminders
- @MockitoBean is mandatory —
@MockBean removed in Boot 4
- Slice tests are fast — Use them for focused testing
- Clear EntityManager — Required to test lazy loading behavior
- @ServiceConnection simplifies Testcontainers — No more
@DynamicPropertySource
- Test security explicitly — Don't rely on disabled security