인프런 강의

Spring 내 테스트 내 중복 처리 방법

WolrdOtaku 2023. 7. 26. 11:27

MemberService 계층

public class MemberService {

    private final MemberRepository memberRepository; //한번 정해두면 변경할 일이 없기 때문에, final로 적어둔다.

    /**
     * 회원 가입
     */
    @Transactional
    public Long join(Member member) {
        validateDuplicateMember(member);
        memberRepository.save(member);
        return member.getId();
    }

    private void validateDuplicateMember(Member member) {
        //중복 회원 예외처리
        List<Member> findMember = memberRepository.findByName(member.getName());
        if (!findMember.isEmpty()) {
            throw new IllegalStateException("이미 존재하는 회원입니다.");
        }
    }
}

 

아래는 해당 서비스 계층의 `validateDuplicateMember` 함수를 예외처리 하기 위한 함수입니다.

여기에는 여러가지 방법이 있습니다.

1. try / catch 활용

...
	@Test
    public void 중복_회원_예외() throws Exception {
        //given
        Member member1 = new Member();
        Member member2 = new Member();

        member1.setName("정윤수");
        member2.setName("정윤수");

        //when
        memberService.join(member1);
        try {
            memberService.join(member2);
        }catch(IllegalStateException e){
            return;
        }

        //then
        fail("에러가 발생하였습니다.");
    }
}

 

2. assertThrow 활용

@Test
    public void 중복_회원_예외() throws Exception {
        //given
        Member member1 = new Member();
        Member member2 = new Member();

        member1.setName("정윤수");
        member2.setName("정윤수");

        //when
        memberService.join(member1);
        
        //then
        //해당 예외클래스가 발생해야 한다. 다음 함수를 실행했을 시
        assertThrows(IllegalStateException.class, ()-> memberService.join(member2));
}


또는

	...
    @Test
    public void 중복_회원_예외() throws Exception {
        //given
        Member member1 = new Member();
        Member member2 = new Member();

        member1.setName("정윤수");
        member2.setName("정윤수");

        //when
        memberService.join(member1);
        IllegalStateException e = Assertions.assertThrows(IllegalStateException.class, ()-> memberService.join(member2));

        //then
        assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
    }

 

3. assertThatThrownBy 사용

    @Test
    public void 중복_회원_예외() throws Exception {
        //given
        Member member1 = new Member();
        Member member2 = new Member();

        member1.setName("정윤수");
        member2.setName("정윤수");

        //when
        memberService.join(member1);

        //then
        Assertions.assertThatThrownBy(()-> memberService.join(member2)).hasMessage("이미 존재하는 회원입니다.");
    }