From spring-boot
Provides Spring Boot 4 testing strategies: slice tests (@WebMvcTest, @DataJpaTest), integration tests, Testcontainers (@ServiceConnection), security (@WithMockUser, JWT), Modulith Scenario API, MockMvcTester, and @MockitoBean migration.
npx claudepluginhub joaquimscosta/arkhe-claude-plugins --plugin spring-bootThis skill uses the workspace's default tool permissions.
Comprehensive testing patterns including slice tests, Testcontainers, security testing, and Modulith Scenario API.
Guides Spring Boot 4 testing with JUnit 6, AssertJ, test slices (@WebMvcTest, @DataJpaTest), Testcontainers, MockMvcTester, and RestTestClient for controllers, repos, and services.
Provides Spring Boot testing patterns for unit (Mockito), slice (@DataJpaTest/@WebMvcTest), integration (@SpringBootTest), and Testcontainers-based tests with JUnit 5. Use when writing @Test methods, @MockBean mocks, or test suites.
Guides TDD for Spring Boot with JUnit 5, Mockito, MockMvc, Testcontainers, JaCoCo. Covers unit, web, integration, persistence tests for features, bugs, refactors.
Share bugs, ideas, or general feedback.
Comprehensive testing patterns including slice tests, Testcontainers, security testing, and Modulith Scenario API.
| Old (Boot 3.x) | New (Boot 4.x) | Notes |
|---|---|---|
@MockBean | @MockitoBean | Required migration |
@SpyBean | @MockitoSpyBean | Required migration |
MockMvc (procedural) | MockMvcTester (fluent) | New AssertJ-style API |
Implicit @AutoConfigureMockMvc | Explicit annotation required | Add to @SpringBootTest |
New fluent, AssertJ-style API for controller testing:
@WebMvcTest(UserController.class)
class UserControllerTest {
@Autowired
private MockMvcTester mvc; // NEW: Fluent API
@Test
void getUser_returnsUser() {
mvc.get().uri("/users/{id}", 1)
.exchange()
.assertThat()
.hasStatusOk()
.bodyJson()
.extractingPath("$.name")
.isEqualTo("John");
}
}
Key Benefits: Fluent assertions, better error messages, AssertJ integration.
| 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 |
@MockitoBean for external services@ServiceConnection for databasesMockMvcTester (new), RestTestClient (new), WebTestClient@WithMockUser, JWT mockingSee EXAMPLES.md for complete working examples including:
MockMvcTester and @MockitoBean (Java + Kotlin)TestEntityManager for lazy loading verification@ServiceConnection for PostgreSQL/Redis@WithMockUser for role-based accessScenario API| 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 |
| Need | Skill |
|---|---|
| Security configuration | spring-boot-security |
| Module boundaries | spring-boot-modulith |
| Data layer patterns | spring-boot-data-ddd |
| Controller patterns | spring-boot-web-api |
@MockBean removed in Boot 4@DynamicPropertySource