MockMvc란?
MockMvc는 웹 어플리케이션을 애플리케이션 서버에 배포하지 않고 테스트용 MVC환경을 만들어 요청 및 전송, 응답기능을 제공해주는 유틸리티 클래스다.
WebAppConfiguration
@Mock
UserRepository userRepository;
@BeforeEach
void mockMvcSetUp(
final WebApplicationContext context,
final RestDocumentationContextProvider provider) {
JwtAuthenticationProvider jwtAuthenticationProvider
= new JwtAuthenticationProvider(AuthFixture.tokenProvider());
// MockMvc를 설정합니다.
this.mockMvc = MockMvcBuilders.webAppContextSetup(context)
.alwaysDo(print()) // 모든 요청과 응답을 콘솔에 출력합니다.
.alwaysDo(restDocs) // Spring REST Docs 설정을 적용합니다.
.alwaysDo(
document("{method-name}",
preprocessRequest(prettyPrint()),
preprocessResponse(prettyPrint()))
)
.addFilter(new CharacterEncodingFilter("UTF-8", true))
.addFilter(new JwtAuthenticationFilter(jwtAuthenticationProvider))
.apply(MockMvcRestDocumentation.documentationConfiguration(provider))
.build();
}
addFilter()
addFilter()로 필터를 추가할 수 있다.
apply()
MockMvc.apply() 메서드는 @Before 어노테이션으로 표시된 메서드 내에서 호출되며, 각각의 테스트 전에 필요한 구성을 수행합니다. 이를 통해 테스트 케이스마다 반복되는 설정 코드를 중복하지 않고 재사용할 수 있습니다.
MockMvc 실행
@Import(RestDocsConfig.class)
@ExtendWith(RestDocumentationExtension.class)
@DisplayName("deleteUser 메서드 실행 시")
@WebMvcTest
@Nested
class DeleteUserTest {
@Autowired
protected RestDocumentationResultHandler restDocs;
@Test
@DisplayName("성공")
void DeleteUser() throws Exception {
//given
User user = UserFixture.user();
FindUserDetailResponse findUserDetailResponse = FindUserDetailResponse.from(user);
given(userService.findUser(any())).willReturn(findUserDetailResponse);
//when
ResultActions resultActions = mockMvc.perform(delete("/api/v1/users/me")
.header("Authorization", accessToken));
//then
resultActions.andExpect(status().isOk())
.andDo(restDocs.document(
requestHeaders(
headerWithName("Authorization").description("액세스 토큰")
)
));
}
}
- andDo() : print, log를 사용할 수 있는 메소드
- perform에 Expect 메서드를 통해서 테스트를 진행할 수 있다.
- andExpect() 로 기대값을 테스트 할수있다.
'프레임워크 > 스프링' 카테고리의 다른 글
Spring Scheduler와 Spring Quartz 차이 (0) | 2024.04.13 |
---|---|
Mockito와 BDDMockito (0) | 2024.03.20 |
[Spring] 프로메테우스, 그라파나 아키텍처 사용 (0) | 2024.02.16 |
[Spring] actuator (0) | 2024.02.15 |
[SpringBoot] 라이브러리 관리 (0) | 2023.03.11 |