본문 바로가기
Spring/스프링 입문

[스프링 입문] 3 - (3) 회원 리포지토리 테스트 케이스

by Poorm 푸름 2023. 8. 2.

[회원 리포지토리 테스트 케이스 작성]

 

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 누른채 클릭

 

 

[출처] 김영한 강사님 인프런 스프링 입문 

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