1. @MockitoBean
기존에는 @MockBean을 사용해 컨텍스트 내의 빈을 모킹했지만, 스프링 부트 3.4부터는 @MockitoBean을 사용한다.
@MockitoBean은 테스트 컨텍스트에서 Mockito를 직접 활용해 모킹된 객체를 빈으로 등록하는 데 특화되어 있다.
@MockitoBean은 테스트 컨텍스트에서 Mockito를 직접 활용해 모킹된 객체를 빈으로 등록하는 데 특화되어 있다.

어차피 3.4부터는 더 이상 @MockBean을 쓰지 못하게 되었으므로, 강제로 @MockitoBean을 쓸 수 밖에 없다.
@SpringJUnitConfig(TestConfig.class)
class BeanOverrideTests {
@MockitoBean
CustomService customService;
// tests...
}
(공식 문서 Java 예시)
2. MockMvcTester
MockMvcTester 내부 구현을 보면 알겠지만, MockMvcTester도 내부적으론 MockMvc를 사용하고 있다.
스프링 공식 문서에서는 AssertJ와 더 잘 통합되어 메서드 체이닝을 통해 fluent하다라고 서술하고 있다.
@Test
fun `로그인 API - 올바른 자격 증명 시 JWT 토큰 반환`() {
val signinRequest = SigninRequest(
email = "user@example.com",
password = "password"
)
val dummyToken = "tokenValue"
whenever(authService.signin(any())).thenReturn(AuthResponse(dummyToken))
val mvcResult = mockMvcTester.post().uri("/auth/signin")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(signinRequest))
.exchange()
assertThat(mvcResult)
.hasStatusOk()
.hasContentTypeCompatibleWith(MediaType.APPLICATION_JSON)
.bodyJson()
.extractingPath("$.token")
.isEqualTo(dummyToken)
}
MockMvc | MockMvcTester | |
Assertion 라이브러리 | Hamcrest | AssertJ |
결과 처리 | andReturn() | exchange() |
가독성 | Hamcrest로 상대적으로 복잡 | AssertJ로 익숙하고 쉬움 |
Spring Boot 3.4.x을 사용 중이라면, 솔직히 MockMvcTester를 쓰지 않을 이유가 전혀 없어보인다.
(MockMvcTester 비동기 테스트 코드 예시)
더보기
@RestController
public class ComputeController {
@RequestMapping("/compute")
public Callable<ResponseEntity<String>> compute() {
return () -> {
Thread.sleep(100); // 비동기 처리
return ResponseEntity.ok("computed");
};
}
}
@Test
void testAsyncProcessing() {
MockMvcTester mockMvc = MockMvcTester.of(new ComputeController());
assertThat(
mockMvc.get().uri("/compute")
.exchange(Duration.ofSeconds(5))
)
.hasStatusOk()
.bodyJson()
.isLenientlyEqualTo("computed");
}
반응형
'Spring' 카테고리의 다른 글
[Spring] Mockito Inline Mock 경고 (0) | 2025.02.22 |
---|---|
[Spring] Stateless Spring Security - 1 (1) | 2024.10.05 |
[Spring] Gradle 경로 에러 (1) | 2024.09.11 |
[Spring] 스프링 부트 3.3에서 추가된 `pageSerializationMode = VIA_DTO` (0) | 2024.08.26 |
[Spring] @ModelAttribute와 @RequestBody의 데이터 바인딩 (0) | 2024.04.05 |
댓글