본문 바로가기
개발/Spring

[Spring] controller unit test with csrf

by 상용최 2021. 3. 17.
반응형

개인프로젝트를 할 때 테스트케이스를 작성해가며 진행했다.

정상적으로 동작하던 테스트케이스들이 Security를 추가하면서 깨지기 시작했다.

원인을 알아보다 csrf 때문에 그랬다는걸 알게 됐다.

 

Spring Security csrf를 적용하여 controller unit test를 작성하는 법을 알아보겠다.

방법은 굉장히 간단하다.

 

1. security-test 의존성 추가

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-test</artifactId>
    <version>5.4.5</version>
    <scope>test</scope>
</dependency>

2. MockMvc.perform 부분에 with() 로 csrf 추가

    @Test
    @DisplayName("회원가입 정상 테스트")
    public void signup() throws Exception {
        // given
        MemberRequest member = new MemberRequest("csytest11111", "csytest111111", "csytest");
        given(memberService.signUp(any())).willReturn(member.getId());

        // when
        mockMvc
                .perform(post("/signup")
                        .contentType(MediaType.APPLICATION_JSON)
                        .accept(MediaType.APPLICATION_JSON)
                        .content(objectMapper.writeValueAsString(member))
                        .with(csrf())
                )
                .andDo(print())
        //then
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.id").value(member.getId()));
    }

 

3. 결과 확인

모든 테스트가 정상적으로 동작하는걸 확인하였다.

반응형

댓글