인프런 커뮤니티 질문&답변

JoonHo Kim님의 프로필 이미지
JoonHo Kim

작성한 질문수

생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현

인가 인터셉터 구현

AdminTestController 질문

작성

·

186

0

안녕하세요.

AdminTestController는 테스트 패키지로 구성하여 Mock객체로 테스트하지 않고 소스단 패키지로 구성하여 테스트 하시는 이유가 있으신지 문의 드립니다.

답변 1

0

구파고님의 프로필 이미지
구파고
지식공유자

해당 강의는 테스트 코드 작성하는 방법을 다루는 강의가 아니고, 테스트 코드 작성이 익숙하지 않으신분들도 있으셔서 따로 테스트 코드는 작성하지 않았습니다. 테스트 코드를 작성해서 테스트하셔도 됩니다!

JoonHo Kim님의 프로필 이미지
JoonHo Kim
질문자

네. 말씀 주신대로 MockMvc 객체로 테스트 코드를 작성해 보았습니다.
테스트 시 Jasypt 비밀번호를 vm option에 담지 않고 applicatoin.yaml에 담아서하는 번거로움이 있네요.

이런 처리까지 수업에 다루었으면 수업이 좀 길어지긴 하겠네요...

@Test
@DisplayName("어드민 조회")
void adminTest() throws Exception {
    //given
    OauthLoginDto.Request request = new OauthLoginDto.Request();
    request.setMemberType("KAKAO");

    ResultActions resultActions = this.mockMvc.perform(post("/api/oauth/login")
                                    .header(HttpHeaders.AUTHORIZATION, "Bearer " + "G5EFX6woTVPfJOShl5OEO1_y7bnX8Q5BiyNo9mWCCinI2QAAAYUkSX77")
                                    .content(objectMapper.writeValueAsString(request))
                                    .contentType(MediaType.APPLICATION_JSON)

    );

    OauthLoginDto.Response response = objectMapper.readValue(resultActions.andReturn().getResponse().getContentAsString(), OauthLoginDto.Response.class);

    //when & then
    this.mockMvc.perform(get("/api/admin/test").header(HttpHeaders.AUTHORIZATION, "Bearer " + response.getAccessToken()))
            .andDo(print())
            .andExpect(status().isForbidden());
    ;
}
구파고님의 프로필 이미지
구파고
지식공유자

테스트만 강의에서 다루려면 몇시간 정도는 더 필요했을꺼에요!

테스트 코드를 작성할 때 저만의 팁을 드리면 @SpringBootTest나 @WebMvcTest 없이 (스프링을 사용하지 않고) 테스트 코드를 작성하면 스프링을 띄우지 않기 때문에 테스트 속도가 엄청나게 빨라집니다.. 그리고 최대한 mock을 활용해서 구현하고있구요

MockMvcBuilders.standaloneSetup 를 사용하면 @WebMvcTest 없이도 테스트코드를 작성할 수 있는데 이것도 한번 찾아보시면 도움이 많이 될겁니다

 

JoonHo Kim님의 프로필 이미지
JoonHo Kim
질문자

꿀팁 감사합니다 :)
오늘 MockMvcBuilders.standaloneSetup 해봐야겠네요...

JoonHo Kim님의 프로필 이미지
JoonHo Kim

작성한 질문수

질문하기