인프런 스프링-10

Cloudman·2022년 11월 27일
0

항해99 스프링 공부

목록 보기
12/15

회원 관리 예제



진행 과정

  1. 비즈니스 요구사항 정리
  2. 회원 도메인과 리포지토리 만들기
  3. 회원 리포지토리 테스트 케이스 작성
  4. 회원 서비스 개발
  5. 회원 서비스 테스트


5) 회원 서비스 테스트

이제 테스트를 해볼텐데, 이전에는 test 클래스에서 따로 테스트를 진행했었는데 좀 더 편하게 하는 방법이 있다고 한다.

이전에 만든 MemberService 를 테스트 하는것이 목적이므로 위 사진처럼 위치해 두고
단축키 Ctrl + Shift + T 를 통해 진행한다.

위와 같은 창이 뜬것을 볼 수 있다.
저기서 테스트할 녀석들을 모두 체크 해준 다음에 Ok 를 해주면...


이렇게 자동으로 만들어준 것을 볼 수 있다.
만들어지는 위치에 패키지 또한 자동으로 만들면서 위치를 잡아주는 것을 볼 수 있다.




이제 안의 내용물을 입력해서 완성해 보자.

실행 결과도 정상적으로 잘 출력 되는것을 볼 수 있다.

위의 given, when, then 주석은 코드를 짤 때 저렇게 단계별로 짜는것을 참고하라는 의미이다.


이번에는 예외처리 부분의 테스트 이다.

위처럼 같은 이름이 들어간 말 그대로 중복에 관련해서 체크하기 위해서 member1 으로 join 을 두번 한다.

하지만 저러한 예외 처리는 try-catch 로 가능하다. 이에 대한 부분은 아래의 사진을 참고하자.

강의 중에 나는 저 fail() 부분이 작동하지 않아서 일단 문의를 남겨놓은 상태이다.
그래서 try 로 하는것은 잠시 놔두고 다른 방법으로 하려고 했는데... 40분 가량을 날린 끝에 원인을 찾았다...

강의에선 계속 assertj 를 강조해서 그 assertj 의 Assertions 만을 사용하는 줄 알았는데 이게 알고보니까

failassertThrows 함수는 junit Assertions 의 기능이였다...

그래서 결국 위에서 Assertions 이 두개가 있어야 하는 것이었다...

그래서 이후 돌린 결과를 보면

이렇게 잘 나오는 것을 볼 수 있다.

저 부분에서 더 상세하게 설정을 해주면

이렇게 앞전에 MemberService 에서 설정했던 예외 메시지와 일치하는지 비교를 하고 그에 맞게 결과를 출력해준다.

하지만 아래 사진처럼 저 설정 부분에서 틀려버리면 아래와 같이 기대값과 다르다고 에러를 띄워주는 것을 볼 수 있다.





그럼 이번에는 try-catch 를 사용한 것이 아닌 더 좋은 다른 방법을 사용해서 확인해보자.

아래처럼 설정해 주면 잘 작동하는 것을 볼 수 있다.

그렇다면 이번에는 메시지를 검증하는 방법에 대해 알아보자
우선 단축키인 Ctrl + Alt + V 를 눌러주면

위 처럼 설정해주면 메시지까지 검증해서 정상작동 확인까지 가능하다.

단, 앞전에 했던 것을 또 추가를 해 줘야 한다.

위 사진을 보면 첫번째에서 hello 를 추가 해주고 이후에 spring 이 두개 추가되는데 만약 첫번째에 hello 가 아닌 spring 이 되어있으면 에러가 터진다.

왜냐면 값이 누적해서 추가되는데(test 전체를 돌렸을 때) 앞에서 이미 추가가 되어있는데 뒤에서 또 하려면 중복이기 때문이다.

그래서 앞에서 했던것과 마찬가지로 초기화 코드를 추가해준다.





이번엔 Test 를 하는 과정에서 문제인 것인데, 아래의 사진을 보면 계속 새롭게 인스턴스를 만들어서 그 Test 파일 내에서만 비교한다고 보면 되는데 이러면...

쉽게 말해서 하나의 DB 에서 다 비교하는게 아니라 서로 다른 DB가 있고 각자 따로 비교하는 환경이라는 말이 된다.

그래서 이를 하나의 DB 에서 비교한다는 느낌으로 바꿔주어야 하는데 이제 이를 해보자.




MemberService 로 다시 넘어와 주자.

저렇게 뒷부분 new 연산자로 새롭게 생성자를 만드는 부분을 날려주고 Alt + Ins 단축키로 Constructor 를 생성해준다.

이후 MemberServiceTest 로 다시 넘어와서 아래 부분을 진행해 준다.

위가 변경 전의 모습이고

마지막 사진이 최종적으로 완성된 모습이다.
위 설명을 주석으로 적어놓았지만 그래도 좀 헷갈리는데... 아니 많이....;;;

결국 마지막으로 들어가는 memberService 안의 값은

여기서 넘어오게 된다고 보면 된다.

profile
코린이

0개의 댓글