ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 패스트캠퍼스 챌린지 18일차
    JAVA/Spring 2021. 11. 18. 20:56

    Controller 테스트 작성

    JUnit과 Mockito에 대한 알아봤던 때와 같이 DMakerController 파일을 열고 Ctrl + Shift + T를 눌러 새로운 Test를 만들어준다.

     

    dmaker.controller.DMakerControllerTest

    @WebMvcTest(DMakerController.class)
    class DMakerControllerTest {
    
    }

    @WebMvcTest는 Mockito와 유사한 면이 있는데 Controller쪽의 Bean들만 붙여서 테스트를 진행할 시 Controller까지 접근하기 위한 경로를 명시하는 등의 과정을 생략할 수 있기 때문에 편리하다. 어노테이션의 옵션에 넣어준 Controller를 붙여준다.

    @WebMvcTest(DMakerController.class)
    class DMakerControllerTest {
        @Autowired
        private MockMvc mockMvc;
    
        @MockBean
        private DMakerService dMakerService;
    }

    MockMvc는 @WebMvcTest에서 제공하는 기능 중 하나로 Controller에 요청값 호출을 해주어야 하는데 MockMvc를 통해서 호출을 가상으로 만들어준다.

    DMakerController는 DMakerService를 의존하고 있기 때문에 DMakerService를  @MockBean 어노테이션을 통해 가짜 Bean으로 등록해서 올려준다.

    @WebMvcTest(DMakerController.class)
    class DMakerControllerTest {
        @Autowired
        private MockMvc mockMvc;
    
        @MockBean
        private DMakerService dMakerService;
    
        protected MediaType contentType =
                new MediaType(MediaType.APPLICATION_JSON.getType(),
                        MediaType.APPLICATION_JSON.getSubtype(),
                        StandardCharsets.UTF_8);
    
        @Test
        void getAllDevelopers() throws Exception {
            DeveloperDto juniorDeveloperDto = DeveloperDto.builder()
                    .developerSkillType(DeveloperSkillType.BACK_END)
                    .developerLevel(DeveloperLevel.JUNIOR)
                    .memberId("memberId1")
                    .build();
    
            DeveloperDto seniorDeveloperDto = DeveloperDto.builder()
                    .developerSkillType(DeveloperSkillType.FRONT_END)
                    .developerLevel(DeveloperLevel.SENIOR)
                    .memberId("memberId2")
                    .build();
    
            given(dMakerService.getAllDevelopers())
                    .willReturn(Arrays.asList(juniorDeveloperDto, seniorDeveloperDto));
    
    
            // get으로 developers를 호출해준다.
            mockMvc.perform(get("/developers").contentType(contentType))
                    .andExpect(status().isOk())
                    .andExpect(
                            jsonPath("$.[0].developerSkillType",
                                    CoreMatchers.is(DeveloperSkillType.BACK_END.name()))
                    )
                    .andExpect(
                            jsonPath("$.[0].developerLevel",
                                    CoreMatchers.is(DeveloperLevel.JUNIOR.name()))
                    )
                    .andExpect(
                            jsonPath("$.[1].developerSkillType",
                                    CoreMatchers.is(DeveloperSkillType.FRONT_END.name()))
                    );
        }
    }

    그 다음으로 getAllDevelopers에 대한 Test를 작성해주는데 우선적으로 테스트할 데이터를 넣을 Dto들을 만들어준다.

    생성한 Dto들을 Mock으로 생성된 DMakerService로 전달해준 뒤 "/developers'에 get 요청을 보내면서 예상되는 값들을 andExpect를 통해 넣어준다.

     

    그럼 아래와 같이 Build가 성공적으로 수행되었음을 볼 수 있다.

     

    Result

     :: Spring Boot ::                (v2.5.6)
    
    2021-11-18 20:53:02.994  INFO 14624 --- [    Test worker] c.f.p.d.controller.DMakerControllerTest  : Starting DMakerControllerTest using Java 1.8.0_202 on DESKTOP-HOTFQPH with PID 14624 (started by myong in C:\Project\dmaker)
    2021-11-18 20:53:02.997  INFO 14624 --- [    Test worker] c.f.p.d.controller.DMakerControllerTest  : No active profile set, falling back to default profiles: default
    2021-11-18 20:53:04.477  INFO 14624 --- [    Test worker] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
    2021-11-18 20:53:04.477  INFO 14624 --- [    Test worker] o.s.t.web.servlet.TestDispatcherServlet  : Initializing Servlet ''
    2021-11-18 20:53:04.477  INFO 14624 --- [    Test worker] o.s.t.web.servlet.TestDispatcherServlet  : Completed initialization in 0 ms
    2021-11-18 20:53:04.509  INFO 14624 --- [    Test worker] c.f.p.d.controller.DMakerControllerTest  : Started DMakerControllerTest in 1.9 seconds (JVM running for 3.234)
    2021-11-18 20:53:04.604  INFO 14624 --- [    Test worker] c.f.p.d.controller.DMakerController      : GET /developers HTTP/1.1
    BUILD SUCCESSFUL in 5s

     

     

     

    본 포스팅은 패스트 캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
    https://bit.ly/3FVdhDa

     

    수강료 100% 환급 챌린지 | 패스트캠퍼스

    딱 5일간 진행되는 환급챌린지로 수강료 100% 환급받으세요! 더 늦기전에 자기계발 막차 탑승!

    fastcampus.co.kr

     

    'JAVA > Spring' 카테고리의 다른 글

    Spring Boot [01. About Spring Boot]  (0) 2022.01.06
    패스트캠퍼스 챌린지 19일차  (0) 2021.11.19
    패스트캠퍼스 챌린지 17일차  (0) 2021.11.17
    패스트캠퍼스 챌린지 16일차  (0) 2021.11.16
    패스트캠퍼스 챌린지 15일차  (0) 2021.11.15

    댓글

Designed by Tistory.