TDD 멤버십 전체 조회 API 구현

윤현우·2023년 2월 5일
0

TDD공부

목록 보기
5/7
post-thumbnail

[ 요구사항 확인 ]

나의 멤버십 전체 조회 API

  • 기능: 내가 가진 모든 멤버십을 조회합니다.
  • 요청: 사용자 식별값
  • 응답: {멤버십 ID, 멤버십 이름, 포인트, 가입 일시}의 멤버십 리스트

클라이언트가 해당 클라이언트의 ID를 입력했을 시 클라이언트가 가진 모든 멤버십을 조회할 수 있게 만들 레파지토리부터 테스트 코드를 진행하겠다.

	@Test
    @DisplayName("멤버십 조회 / 멤버십이 없을 때")
    void NoMembership(){
        List<Membership> findMembership = membershipRepository.findByUserId("userId");

        assertThat(findMembership.size()).isEqualTo(0);
    }

멤버십이 없을 때와 있을때의 테스트코드를 나누어 작성한다.

처음으로 멤버십이 없을때의 테스트 코드를 짜보았을 때,

MembershipRepository에 findByUserId가 없기 때문에 컴파일 오류가 난다.

이 컴파일 오류부터 해결해보자.

@Repository
public interface MembershipRepository extends JpaRepository<Membership, Long> {
    Membership findByUserIdAndMembershipType(String userId, MembershipType membershipType);

    List<Membership> findByUserId(String userId);
}

MembershipRepository를 수정 후 다시 테스트를 돌려보면 성공한다.

이번에는 멤버십이 있을 때의 코드를 짜보았다.

	@Test
    @DisplayName("멤버십 조회 / 멤버십이 있을 때(2개)")
    void TwoMembership(){
        //given
        Membership KakaoUserA = Membership.builder()
                .userId("userA")
                .membershipType(MembershipType.KAKAO)
                .point(10000)
                .build();

        Membership NaverUserA = Membership.builder()
                .userId("userA")
                .membershipType(MembershipType.NAVER)
                .point(10000)
                .build();

        membershipRepository.save(KakaoUserA);
        membershipRepository.save(NaverUserA);

        //when
        List<Membership> findResult = membershipRepository.findByUserId("userA");

        //then
        assertThat(findResult.size()).isEqualTo(2);
    }

잘 성공하는 것을 확인할 수 있다.

이제 서비스 파트를 테스트 해보자

@Test
    @DisplayName("멤버십 조회 기능")
    void findMembership(){
        //given
        Membership NaverUserA = Membership.builder()
                .userId("userA")
                .membershipType(MembershipType.NAVER)
                .point(10000)
                .build();

        Membership KakaoUserA = Membership.builder()
                .userId("userA")
                .membershipType(MembershipType.KAKAO)
                .point(10000)
                .build();

        Membership naverUserA = membershipRepository.save(NaverUserA);
        Membership kakaoUserA = membershipRepository.save(KakaoUserA);

        //when

        List<Membership> findMembership = memberService.read("userA");

        //then
        assertThat(findMembership.size()).isEqualTo(2);
    }

Service 클래스에 read메서드가 없어 컴파일 오류가 난다.

Service클래스에 read메서드라는 프로덕트 코드를 작성해보자.

public List<Membership> read(String userId) {
    List<Membership> findMembership = membershipRepository.findByUserId(userId);

    return findMembership;
}

다시 돌려보면 테스트에 성공한 것을 확인할 수 있다.

이제 서비스 프로덕트 코드의 리팩토링을 하면 된다.

하지만 dto -> entity, entity -> dto 변환작업은 나중에 실시할 예정이므로 리팩토링은 잠시 내버려두고 주석을 통해 고칠 부분만 확인해둔다.

profile
개발자가 되는 그날까지

0개의 댓글