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("이미 존재하는 회원입니다.");
}
'인프런 강의' 카테고리의 다른 글
H2 설치 & 실행 방법 (0) | 2023.07.07 |
---|---|
스프링 빈 주입 (0) | 2023.07.05 |
WAS에서 화면을 랜더링?? (0) | 2023.06.30 |
WAS의 Servlet (feat. Multi Thread) (0) | 2023.06.29 |
Web Server와 WAS (0) | 2023.06.28 |