-
패스트캠퍼스 챌린지 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