회원가입 테스트
주로 테스트는 given, when, then으로 시작한다.
given에 적용해야 할 것들을 적용하고 when에서 테스트할 로직을 실행한다. then에서 그 결과를 도출해낸다. member 객체를 생성하고 그 객체의 이름을 spring으로 한다. join을 하게 되면 중복회원검증을 하고 통과하면 setId를 부여하고 그 id를 리턴하게 된다. 그 후 then 부분에서 리턴받은 ID로 member객체를 찾고 그 객체가 테스트에서 만든 객체 같은지 비교한다.(여기선 이름으로 비교함)
1번에서는 정상적인 회원가입 플로우 경우이고 예외 경우도 생각해야 한다.
즉 이름 중복 체크가 잘 동작하는지 확인하려고 만든 테스트 코드이다.
member1, member2 객체를 생성하고 이름을 spring으로 동일하게 지정한다.
처음 member1에서는 정상적으로 작동할 것이고 member2에서는 exception이 날 것이다.
전에는 try catch로 예외처리 확인을 했지만 assertThrows는 리턴타입이 있다. 이 것으로 메세지를 비교한다.
처음에는 memberService와 memberRepository 객체를 new로 생성했다. 하지만 memberService에서도 new로 meemberRepository 객체를 new로 생성한다. 즉 Test에서 객체와 Serivce에서 객체와 서로 다르다. 이것을 같게 해주는 방법이 DI 의존성 주입이다.
즉 beforeEach에서 시작하기 전에 리포지토리를 생성하고 그 객체를 서비스에 넣어준다.
기존에는 서비스 쪽에서도 new로 만들었지만 이제는 외부에서 주입된 리포지토리로 변경한다.