-
테스트 코드 리팩토링하기프로젝트/게시판 프로젝트 2022. 5. 31. 01:24
기존의 테스트 코드에는 매번 테스트를 위해 MemberRequestDTO를 만들어줬습니다.
결국에는 계속 중복되는 로직이 발생하였고 만약 요구사항의 변경으로 Entity가 변경된다면 모든 코드를 수정해줘야 하는 불편함도 겪었습니다.
따라서 매번 중복적으로 만들어주는 부분을 메서드로 뽑아 유지보수성과 가독성을 올리고자 합니다.
기존 코드
@Test @DisplayName("회원 가입 정상 로직") public void memberNotDuplicateTest() { //given MemberRequestDTO memberRequestDTO = MemberRequestDTO.builder() .userId("Test") .name("Test") .nickName("Test") .password("Test") .phoneNumber("Test") .address(new Address("a1", "a2", "a3")) .build(); //when memberService.join(memberRequestDTO); //then assertThat("Test").isEqualTo(memberRepository.findByUserId("Test") .get() .getUserId()); } @Test @DisplayName("회원 가입 중복 발생") public void memberDuplicateTest() { //given MemberRequestDTO memberRequestDTO = MemberRequestDTO.builder() .userId("Test") .name("Test") .nickName("Test") .password("Test") .phoneNumber("Test") .address(new Address("a1", "a2", "a3")) .build(); memberService.join(memberRequestDTO); MemberRequestDTO member1 = MemberRequestDTO.builder() .userId("Test") .name("Test") .nickName("Test") .password("Test") .phoneNumber("Test") .build(); boolean result = memberService.validateIsDuplicate(member1); Assertions.assertEquals(result, true); }
리팩터링 후
@Test @DisplayName("회원 가입 정상 로직") public void memberNotDuplicateTest() { //given MemberRequestDTO memberRequestDTO = getMemberRequestDTO("Test"); //when memberService.join(memberRequestDTO); //then assertThat("Test").isEqualTo(memberRepository.findByUserId("Test") .get() .getUserId()); } @Test @DisplayName("회원 가입 중복 발생") public void memberDuplicateTest() { //given MemberRequestDTO memberRequestDTO = getMemberRequestDTO("Test"); memberService.join(memberRequestDTO); MemberRequestDTO member1 = getMemberRequestDTO("Test"); boolean result = memberService.validateIsDuplicate(member1); Assertions.assertEquals(result, true); } private MemberRequestDTO getMemberRequestDTO(String settingValue) { MemberRequestDTO memberRequestDTO = MemberRequestDTO.builder() .userId(settingValue) .name(settingValue) .nickName(settingValue) .password(settingValue) .phoneNumber(settingValue) .address(new Address("a1", "a2", "a3")) .build(); return memberRequestDTO; }
settingValue 인자를 통해 유동적으로 값을 조정할 수도 있습니다.
모든 테스트 코드에 위와 같은 로직을 적용하였고 이로 인해 중복제거와 코드의 가독성이 향상되었습니다.
'프로젝트 > 게시판 프로젝트' 카테고리의 다른 글
JPA Table에 Unique Index 달기 (0) 2022.06.03 API 문서화를 위한 Swagger와 Spring Rest Docs 비교 (0) 2022.05.31 뉴스 정보를 가져와 보자(크롤링, 네이버 뉴스 API 사용법) (0) 2022.05.25 JWT란? JWT 원리, 사용법 (0) 2022.05.24 Optional을 올바르게 활용해보기 (0) 2022.05.24