[스프링 입문] 3 - (3) 회원 리포지토리 테스트 케이스
[회원 리포지토리 테스트 케이스 작성]
1. findById 테스트
src - test - java - hello.hellospring 우클릭 → New - Package 클릭 → repository 입력 후 우클릭 →
New - Java Class → Test 입력 → 강의자료 코드 붙여넣기
☞ Member member = new member : main 메서드와 비슷
member.setName(''spring")
☞ repository.save(member) : 리포지토리에 member 저장
☞ Member result = repository.findById(member.getId()).get() : 반환타입 Optional. 즉 꺼낼 때 get 이용
(단축키 Ctrl + Alt + V 사용)
내가 넣었던 id 찾아보기 ( = result )
☞ assertThat(member).isEqualTo(result) : 검증 단계. 총 3가지 방법이 있다
23줄 member와 28줄 DB에 저장된 result 같면 성공
- 1번째 방법
soutv 입력 후 enter 하면 System.out.println("result = " + result) 로 출력
이때 + result 부분을 + (result == member)로 변경
System.out.println("result = " + (result == member)) 로 run하게 되면 결과를 true란 글자로 표현
- 2번째 방법
Assertions.assertEquals(member, result) 라고 입력 후 run하면 글자가 아닌 녹색 표시로 결과 표현
이때 Assertion은 org.junit.jupyter.api
- 3번째 방법
Assertion.assertThat(member).isEqualTo(result) 입력 후run하면 글자가 아닌 녹색 표시로 결과 표현
이때 Assertion은 org.assertj.core.api
단축키 Alt + Enter 를 눌러 Add ~ static import 클릭하면 앞에 Assertion은 자동으로 생략
2. findByName 테스트
☞ Member member1 = new member : 리포지토리에 member1 저장
member.setName(''spring1")
repository.save(member)
☞ Member member2 = new member : 리포지토리에 member2 저장
member.setName(''spring2")
repository.save(member2)
☞ Member result = repository.findByName("spring1").get()
: repository.findByName("spring1")까지 입력 후 단축키 Ctrl + Alt + V 입력해서 Optional 설정
repository.findByName("spring1").get()까지 입력 후 Ctrl +Alt + V 입력후 Member result 설정
☞ assertThat(result).isEqualTo(meber1) : result가 spring1이고spring1은 member1 이므로 테스트 성공
result가 spring2라면 테스트 오류
3. findAll 테스트
☞ Member member1 = new member : 리포지토리에 member1 저장
member.setName(''spring1")
repository.save(member)
☞ Member member2 = new member : 리포지토리에 member2 저장
member.setName(''spring2")
repository.save(member2)
☞ List<Member> result = repository.findAll() : 검증단계
☞ assertThat(result.size()).isEqualTo(2) : EqualTo(3)이라면 테스트 오류
잠깐, 의문점
Run 했을 때엔 잘 돌아가는데 전체 Run 하면 안돌아가는 이유
: 테스트의 순서는 동작할수 없다
테스트를 돌려보면 findAll - findByName - save(findById) 순으로 돌아가는데
이미 findAll 실행하면서 spring1과 spring2가 저장되었고 findByName에서 이때 저장된 spring들을
사용하려해서 오류가 생기는것
- 해결 방안
1. MemoryMemberRepositoryTest에서 아래코드 작성
2. MemoryMemberRepository에서 아래코드 작성
이렇게 하면 테스트가 끝날때마다 repository를 지우기 때문에 순서가 상관없다
이 때 알아둘 단축키!!
1. 변수 추출
☞ Ctrl + Alt + V
2. 단어 클릭하면 해당 클래스로 바로 이동
☞ Ctrl 누른채 클릭
[출처] 김영한 강사님 인프런 스프링 입문
[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세
www.inflearn.com