slice 테스트로 controller의 post 테스트 로직을 작성하고 실행했더니 401 Unauthorized 에러가 발생했다.
test 로직에서도 post 요청을 할 때 권한을 같이 넘겨줘야 한다는 것 같은데, WebMvcTest가 컨트롤러 테스트할 때 스프링 시큐리티가 자동으로 구성하는 Configuration 파일들을 불러와서 그렇다고 한다.
해당 문제는 다음과 같이 임의의 UserDetails를 만들어서 해결할 수 있다.
@WithMockUser
@Test
public void postCvTest() throws Exception {
}
또는 다음과 같이 excludeFilters를 활용해서 해당 Configurer를 회피하는 방법도 있다.
@WebMvcTest(value = CvController.class, excludeFilters = {
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = WebMvcConfigurer.class)
})
@MockBean(JpaMetamodelMappingContext.class)
@AutoConfigureRestDocs
public class CvControllerTest {
}
@WihMockUser을 적용해주고 나니 이번에는 403 에러가 발생했다..
해당 에러는 Security 설정을 할 때 csrf().disable()을 적용하지 않았을 때 나던 에러였다. csrf 공격을 막기 위해 csrf 토큰 값을 비교해서 일치하는 경우에만 메서드를 처리하도록 하는 것이다.
검색해보니 ResultActions를 정의할 때 .with(csrf())를 적용하면 파라미터로 csrf 토큰값을 같이 넘겨준다고 한다.
// when
ResultActions postActions =
mockMvc.perform(
post("/cv")
.with(csrf())
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON)
.content(content)
);
'개발 일지 > Spring' 카테고리의 다른 글
data.sql 초기화 설정 후 Error creating bean with name 'dataSourceScriptDatabaseInitializer' 에러 (0) | 2023.05.27 |
---|---|
[Gradle] build와 bootJar의 차이 (0) | 2023.05.20 |
[Spring] Mapstruct 클래스타입 변환 / N:M 관계 매핑 에러 (0) | 2023.05.09 |
[JPA] @ElementCollection (0) | 2023.04.30 |
[Spring Boot] web.xml (0) | 2023.04.12 |