Provides comprehensive testing patterns for Spring Boot applications covering unit, integration, slice, and container-based testing with JUnit 5, Mockito, Testcontainers, and performance optimization. Use when writing tests, @Test methods, @MockBean mocks, or implementing test suites for Spring Boot applications.
Provides comprehensive testing patterns for Spring Boot applications covering unit, integration, slice, and container-based testing with JUnit 5, Mockito, Testcontainers, and performance optimization. Use when writing tests, @Test methods, @MockBean mocks, or implementing test suites for Spring Boot applications.
allowed-tools
Read, Write, Edit, Bash, Glob, Grep
Spring Boot Testing Patterns
Overview
Comprehensive guidance for writing robust test suites for Spring Boot applications using JUnit 5, Mockito, Testcontainers, and performance-optimized slice testing patterns.
When to Use
Writing unit tests for services or repositories with mocked dependencies
Implementing integration tests with real databases via Testcontainers
Testing REST APIs with @WebMvcTest or MockMvc
Configuring @ServiceConnection for container management in Spring Boot 3.5+
Quick Reference
Test Type
Annotation
Target Time
Use Case
Unit Tests
@ExtendWith(MockitoExtension.class)
< 50ms
Business logic without Spring context
Repository Tests
@DataJpaTest
< 100ms
Database operations with minimal context
Controller Tests
@WebMvcTest /
@WebFluxTest
< 100ms
REST API layer testing
Integration Tests
@SpringBootTest
< 500ms
Full application context with containers
Testcontainers
@ServiceConnection / @Testcontainers
Varies
Real database/message broker containers
Core Concepts
Test Architecture Philosophy
Unit Tests — Fast, isolated tests without Spring context (< 50ms)
Slice Tests — Minimal Spring context for specific layers (< 100ms)
Integration Tests — Full Spring context with real dependencies (< 500ms)
Key Annotations
Spring Boot Test:
@SpringBootTest — Full application context (use sparingly)
@DataJpaTest — JPA components only (repositories, entities)
@WebMvcTest — MVC layer only (controllers, @ControllerAdvice)
@WebFluxTest — WebFlux layer only (reactive controllers)
@JsonTest — JSON serialization components only
Testcontainers:
@ServiceConnection — Wire Testcontainer to Spring Boot (3.5+)
@DynamicPropertySource — Register dynamic properties at runtime