처음 코드를 작성할때, Optional로 값을 받은후 result. isPresent를 사용하여 값의 유무를 확인하고, null을 바로 반환하는 것이 아닌, error을 던져주었다. (좌 : 첫번째 사진)
어차피 결과가 바로 반환되기 때문에, 반환된 결과 뒤에 바로 isPresent를 사용하여 데이터의 유무를 판단한 후 오류를 throw한 코드로 변경하였다. (우 : 두번째 사진)
좌 : 첫번째 사진, 우 : 두번째 사진
📌 회원 서비스 테스트
command + shift + t 를 사용하면 자동으로 test 클래스를 만들어준다.
테스트클래스의 메서드는 한글로 적어도 괜찮다
처음 테스트 케이스를 만들때 given, when, then 으로 나눠서 작성하면 쉽다. (-> 나중에 본인만의 방식으로 바꿔도 무관)
📌 테스트 예외처리 확인
❗ 테스트 전 알아야할 메서드 assertThat AssertJ 라이브러리에서 제공하는 메서드 이다. 예상결과와 실제 결과를 비교하여 검증하는데 사용된다. 결과가 같다면: 테스트는 성공한다. 결과가 다르다면: 테스트는 실패하고, 상세한 오류 메시지를 출력한다. 아래 코드는 오류에서 메시지를 가져와, 아래에 있는 메시지와 같은지 확인하는 코드이다. 보통 아래와 같이 쓰인다고 생각하면 된다.
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다. ");
회원가입 예외처리
assertThat을 사용하여 예상 결과와 실제 결과를 비교하여 검증한다.
<왼쪽사진>에서는 오류가 발생하는지 확인하려고 member1 과 member2의 이름을 다르게 한 후, 데이터베이스에 저장된 값과 다른 값을 비교하여 오류가 발생하는지 확인한다. -> 오류 발생 확인 완료
<오른쪽 사진>에서는 데이터베이스에 멤버를 저장한 후, 멤버의 이름을 가져와서 확인을 했다 -> 정상 작동 확인 완료
중복 회원 예외처리
아래는 memberService의 중복처리 메서드이다.
중복 예외처리가 발생하는지 테스트할 것이다.
❗ 테스트 전 알아야할 메서드 assertThrows 메서드 JUnit에서 제공하는 메서드이다. 특정 코드 블록이 예외를 발생시키는지 확인할 때 사용되며, 만약 코드 블럭이 지정된 예외를 던지지 않으면 테스트는 실패한다.
1. 아래와 같은 코드가 있다. 여기서 assertThrows에 대한 사용은 2. 람다식의 memberService.join(member2)가 실행될때, IllegalStateException이 발생하는지 확인하고 만약 IllegalStateException이 발생하지 않으면 테스트는 실패하게 한다.
IllegalStateException e = assertThrows(IllegalStateException.class,
() -> memberService.join(member2));
테스트를 위해 아래와 같이 test 코드를 작성했다.
assertThrows를 사용하여 IllegalStateException이 발생하는지 확인을 한 후, 해당 예외를 e에 저장했다.
발생한 e의 예외 메세지와, 위에 있던 MemberService에서 저장했던 오류 메시지가 같은지 확인을 위해 assertThtat을 사용하여 결과를 비교한다.
e.getMessage를 사용하여 저장했던 메시지와 오류 메시지가 같은지 확인했다 -> 테스트 확인 완료