🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

AdminTestController 질문

22.12.17 09:15 작성 조회수 154

0

안녕하세요.

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

답변 1

답변을 작성해보세요.

0

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

JoonHo Kim님의 프로필

JoonHo Kim

질문자

2022.12.18

네. 말씀 주신대로 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

질문자

2022.12.23

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

채널톡 아이콘