티스토리 뷰

@WebMvcTest란? 

SpringMvc에 관련된 것들만 불러와서 테스트 할 수 있게 해주는 어노테이션.

 

테스트에 필요한 것들만 불러오기 때문에 로딩하는 속도가 비교적 빨라서 테스트를 자주 실행할때 많은 도움이 되는 어노테이션입니다.

 

 

MockMvc란?

MockMvc는 Spring 애플리케이션의 웹 계층을 테스트하기 위한 목(Mocks) 테스트 지원 클래스 입니다. 이를 사용하면 실제 HTTP 요청을 보내지 않고도 컨트롤러 엔드포인트를 호출하고 해당 엔드포인트의 응답을 검증할 수 있습니다. 이는 테스트의 속도를 향상시키고 테스트 환경을 더욱 예측 가능하게 만듭니다.

 

 

오늘 테스트 할 코드는 아래 world라는 String을 리턴하는 Controller입니다.

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/hello")
public class HelloController {
    @GetMapping
    public String hello() {
        return "world";
    }
}

 

/api/v1/hello를 호출 했을 때 world를 리턴 하는지 확인하는 테스트 입니다.

@WebMvcTest(HelloController.class) // HelloController를 테스트
class HelloControllerTest {

    @Autowired
    MockMvc mockMvc;

    @MockBean
    PostService postService;

    @Test
    @WithMockUser
    @DisplayName("hello test")
    void name() throws Exception {

        mockMvc.perform(get("/api/v1/hello")
                        .with(csrf()))
                .andDo(print())
                .andExpect(status().isOk())
                .andExpect(content().string("world"));
    }
}

여기에서는 content().string()을 썼습니다.

 

 

WithMockUser를 사용할 때 문제점

SecurityConfiguraion에서 api를 .permitAll()로 지정했음에도 불구하고 인증 완료된 사용자라는 의미의 @WithMockUser를 사용하는 이유는?

 

테스트를 할때는 SecurityConfiguraion까지 빈으로 올리지는 않아서 무엇을 통과시켰는지 모른기 때문. 따라서 그냥 인증된 사용자, 안 된 사용자로 나눠서 테스트를 실행합니다.

https://docs.spring.io/spring-boot/docs/current/reference/html/test-auto-configuration.html#appendix.test-auto-configuration

 

@WithMockUser 어노테이션은 기본적으로 SecurityAutoConfiguration, SecurityFilterAutoConfiguration 를 빈으로 등록하고 커스텀으로 생성한 것을 넣지 않습니다.

 

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함