개발/spring1

13강(회원 서비스 클래스 테스트)

LoafingCat 2022. 11. 17. 00:21

편하게 테스트 클래스 만들기

 

 

얘를 alt + Enter 해주면

 

 

요렇게 테스트 클래스 만들건지 물어본다.

 

 

누르면 이렇게 뜨고 데려갈 멤버를 체크해주고 오케이.

 

 

그럼 간단하게 만들어진다.

 

테스트는 과감하게 한글로 이름을 바꿔도 된다고 . 외국인이랑 일하는 아닌 이상 한글로도 많이 적음.

 

 

이렇게 하면 회원가입에 성공.

 

그런데 여기서 중요한 것은 정상 플로우(?) 보단 예외 플로우(?)가 중요함.

 

Join 핵심은 저장이 되는 것도 중요한데 중복회원검증 로직을 파서 예외가 터트려 지는지도 봐야함.

 

 

요기서 예외가 터트려지는지가 중요함.

 

 

Try catch 예외를 잡아내는 방법도 있으나 비효율적이다.

 

 

assertThrows라는 좋은 문법을 사용해서 예외를 member2 넣었을 익셉션이 터져야 한다.

 

 

그런데 member1을 넣었을 때도 익셉션이 터진다. 왜지???(이해가 안됨. 질문)

숙제 : 답변 정리해서 적어보기

이미 memberservice 등록된 member1 'spring' 리터럴이 다시 memberservice 등록되는 꼴이기 때문. member1,2 문제가 아닌, 이미 등록된 spring 다시 등록되어 예외가 터지게 되는 것이다

 

중복 제외를 해주는 부분. 그런데 애매한게 있다. MemerService에 있는 객체와 테스트 서버에 있는 객체가 서로 다르기 때문에 뭔가 애매하다고 한다. 개를 따로 이유가 없음.

 

 

지금은 static으로 되어 있기 때문에 문제가 없지만 만약 static이 없으면 서로 다른 DB가 되기 떄문에 문제가 생긴다.(???질문)

 

같은 리포지토리로 테스트 하는게 맞다.

 

같은 인스턴스 쓰게 만드는 방법

 

 

memberRepository를 직접 new로 생성하는게 아니고 외부에서 넣어주도록 바꾸기.

 

 

@BeforeEach: 테스트 메소드 이전에 수행된다.

이렇게 하면 테스트 실행할 때마다 각각 생성을 해준다.(독립적으로 실행 되어야하기 때문)

memoryMemberRepository 만들고  얘를 위에 넣어 놓음. 그럼 얘를 memberService에서 memberRepository 넣어준다.

그럼 같은 memoryMemberRepository 사용이 된다.(이해 안됨..질문)

 

MemberService 입장에서 직접 new 하지 않고 외부에서 memberRepository 넣어준다. 이런걸 dependency injection(의존관계 주입)이라고 한다.