ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 테스트 코드 리팩토링하기
    프로젝트/게시판 프로젝트 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 인자를 통해 유동적으로 값을 조정할 수도 있습니다.

    모든 테스트 코드에 위와 같은 로직을 적용하였고 이로 인해 중복제거와 코드의 가독성이 향상되었습니다.

     

     

    댓글

Designed by Tistory.