YoungSoo

스프링 입문 - 회원 서비스 테스트 본문

BE/Spring

스프링 입문 - 회원 서비스 테스트

YoungSooSoo 2022. 7. 7. 01:30

전 시간에 만든 회원 서비스를 테스트 해볼 예정이다.

전 테스트 시간에는 직접 test폴더에 패키지와 Test파일을 만들어 진행하였는데 더 좋은 방법이 있다.

Test 파일 생성

Ctrl + Shift + T 단축키를 이용해 자동으로 만들 수 있고 맨 밑에 체크만 해주면 된다.

Test

이렇게 자동으로 만들어준다.

MemberServiceTest

테스트 할 때 메소드 이름은 한글로 해도 상관이 없다.

Given = 값이 주어졌을때, When = 실행되었을때, Then = 나와야하는 결과테스트는 보통 3가지 순서대로 주어지는데 그게 바로 Given, When, Then이고 그렇기에 이렇게 나누어서만들어주면 좋다.

회원가입 테스트 코드를 만들었는데 이것은 너무 단순한 동작이고 테스트는 정상적인 동작도 중요하지만

예외적인 동작이 더 중요하다.

중복_회원_예외

예외가 더 중요하기 때문에 예외 테스트를 만들어주었다.

예외가 발생할 때 메세지가 전에 만든 validateDuplicateMember에서의 예외 메세지가 같은지 비교해주었다.

학교에서 예외처리로 배우는 것은 대부분 try-catch문으로 알고 있었는데 이러한 예외테스트 때문에

비효율적이라고 해서 assertThrows라는 것을 사용해주는데 이것은 예외가 발생했을 때IllegalStateException.class가 발생하는지 알려주고 memberService.join(member2)를 넣으면 예외가된다고 알려주는 것이다.

 

이대로 실행한다면 문제없이 돌아가겠지만 전 테스트 시간 처럼 member에 hello가 아니라 spring가 들어간다면

오류가 날 것이다. 그렇기 때문에 저장된 데이터를 초기화해줘야한다.

하지만 MemberService밖에 없기 때문에 클리어가 안 되기 때문에 MemoryMemberRepository 객체를

만들어주어야 하고 그냥 만들면 서로 다른 객체 두 개를 만들어 주는 것이기 때문에 같은 객체로 사용하게 하는게 좋다.

수정

MemberService로 돌아가 위와 같이 수정해주고 Ctrl + N을 눌러 생성자를 만들어주어 외부에서 넣도록

바꾸어 준다.

@BeforeEach

@BeforeEach 어노테이션을 사용해 동작하기 전에 넣어주도록 한다.

@BeforeEach는 각 테스트 실행 전에 호출되며 테스트가 서로 영향이 없도록 항상 새로운 객체를 생성하고, 의존관계도 

새로 맺어준다

 

해당 글은 김영한 님의 인프런 강의를 보고 정리한 글 입니다.

출저 - https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com