회원 기능 테스트
1 .디렉토리 생성
test 디렉토리 밑에 service라는 디렉토리를 생성한 뒤 MemberServiceTest 클래스를 생성한다.
2. 코드 작성
1. 어노테이션
- @RunWith(SpringRunner.class) : Junit 실행 시 Spring 도 같이 실행을 하겠다는 어노테이션
- @SpringBootTest : 스프링 컨테이너 안에서 테스트를 돌린다.
- @Transactional : 하나의 쿼리로 진행하여 테스트가 끝난 후 롤백을 진행하게 된다.
2. 회원가입 테스트
- @Transactional 의 사용으로 자동으로 Rollback이 되어 Insert 쿼리가 날라가지 않는다.
- @Rollback(false)
- 테스트 코드는 기본적으로 Rollback 을 진행한다.
- Rollback이 true 인 상태에서는 Insert 쿼리가 진행 되지 않는다. (영속성 컨텍스트의 플러시를 진행하지 않는다.)
- @Autowired EntityManager em; 선언 뒤 em.flush()를 사용하면 영속성 컨텍스트의 플러시를 진행하여 Insert 쿼 리를 내보낸 후 테스트코드에서 Rollback을 진행하게 된다.
- @Autowired 로 EntityManager를 선언한 뒤 flush를 해주어 insert 문을 실행 시킬 수 있다.
3. 중복 회원 예외 테스트
- Name 이 같으면 IllegalStateException을 뱉어 에러가 발생하게 된다. 그래서 try /catch 문으로 에러에 대한 예외처리를 진행한다.
- @Test 어노테이션에 (expected) 속성으로 에러발생을 정상 로직으로 작성할 수 있다.
3. 스프링 부트 테스트 설정
- 스프링 부트는 main 디렉토리 밑에 test 디렉토리밑 java에 Test Code가 만들어 지고 관리하는데, test 디렉토리 밑에 resources 디렉토리를 추가해 yml 파일을 만들어 Test Code 에 대한 실행 설정을 할 수 있다.
- Test Code를 인메모리로 설정 할 수 있는데, H2 에서 제공하는 인메모리 기능을 사용할 수 있다.
- 스프링 부트는 따로 설정을 하지 않아도 자동으로 인메모리 기능을 사용 할 수 있다.
강의 : 인프런 실전! 스프링 부트와 JPA 활용1 (김영한) - 회원 기능 테스트 https://inf.run/VMWUhttps://inf.run/HNEB