실제 비즈니스 로직을 작성하는 곳!
<서비스>
domain, repository, controller 패키지와 동일한 위치에 service 패키지를 생성하고, MemberService class를 생성한다.
Optional로 감싸면 그 안의 여러 메소드를 쓸 수 있다.
e.g. ifPresent()
Optional을 빼고 바로 validateDuplicateMember의 내용처럼 작성할 수 있다.
** 네이밍 방식
MemberService에서 Create new Test를 활용하면 자동으로 테스트 파일을 만들어 준다.
테스트 라이브러리는 JUnit5를 선택한다.
같은 instance를 쓸 수 있도록 new MemoryMember 등을 외부에서 넣어주도록 MemberService 코드를 수정한다.
그 후, test 코드도 수정해 MemberService를 생성할 때 MemoryMember를 넣어주도록 한다.
=> 같은 MemoryMemberRepository를 사용하도록 한다.
DI (Dependency Injection)
given, when, then
테스트는 예외 처리 역시 중요하다!
try catch 문을 활용하는 방법도 있지만 다른 방법도 있다.
assertThrow: 뒤의 로직을 실행하면 앞의 exception이 터져야 한다.