본문 바로가기

강의 내용 정리/스프링 입문

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

1. MemoryMemberRepository 의 save 메서드 테스트

2. MemoryMemberRepository 의 findByName 메서드 테스트

3. MemoryMemberRepository 의 findAll 메서드 테스트

4. 테스트간의 독립성

 

---------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

MemoryMemberRepository 의 테스트케이스를 작성해보자.

 

MemoryMemberRepositoryTest 생성.

 

먼저 save메서드를 test해보자.

 

 

1. 멤버만들어서 이름을 "spring"으로

2. 테스트할 MemoryMemberRepository인 respository.save(member)     -> 실제로 save메서드 이용해보기

3. 멤버의 아이디를 가져와 findbyId로 멤버 찾아서 result에 저장. 이때 맨 뒤 get()은 findById 메서드의 리턴 값이 Optional이라서 Optional 한번 벗기기 위해 사용. 원해 이런 방법이 좋진 않지만 Test라 그냥 씀

4.

위와 같이 직접 찍어보아 눈으로 확인 할 수 도 있지만 데이터많아지면 그러기 쉽지않다.

 

그래서 Assertions 사용.

 

5. junit의 Assertions 을 import 하고 assertEquals 메서드를 사용한다. 첫 파라미터는 기대하는값, 두번째는 실제값을 넣는다.

 

 

6. 더 편한 방법

junit의 Assertions가 아니라 

assertj 의 Assertions를 사용한다. 이건 assertThat 문법을 지원하는데 위와같이 실제 값을 넣고 isEqualTo 메서드에 기대 값을 넣어 비교하면 된다.

이 때

static 으로 import 하면 

바로 assertThat을 쓸 수 있다.

 

 

---------------------------------------------------------------------------------------------------------------------------------------------------------

 

2. MemoryMemberRepository 의 findByName 메서드 테스트

 

1. member1을 만들고 이름을 spring1 으로 설정한 뒤 repository에 save메서드로 저장.

2. member2는 spring2로 만들기

3. findByName을 써서 이름이 spring1 인 Member 객체를 result에 저장

4. assertThat으로 비교

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

3. MemoryMemberRepository 의 findAll 메서드 테스트

 

1. 똑같이 멤버 두개 만들고 findAll의 리턴타입이 List<Member> 이므로 List<Member> result에 저장

2. size를 비교

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

4. 테스트간의 독립성

 

 

 

 

 

!!!!!!!!!!!!!!!!!!정말중요!!!!!!!!!!!!!!!!!

테스트 순서는 보장이안됨. 모든 테스트는 순서와 상관없이 메서드 별로 따로 동작하게 설계해야함.

순서 의존 설계 XXX

 

 

 

 

 

 

 

 

 

# 문제점

1. findAll에서 spring1, spring2 이름으로 repository에 저장됨. -> findByName에서 다른 객체가 나와버림

 

# 해결

 

- 테스트 하나 끝나고나면 repository를 깔끔하게 clear해줘야함.

1. @AfterEach를 붙힌 메서드 하나 만들어 준다. 이 메서드는 @Test 메서드 끝날때 마다 @AfterEach 메서드 실행됨.

 

2. test가 아닌 실제 MemoryMemberRepository에 clearStore() 메서드를 만든다. Map의 메서드 clear로 비워준다.

 

3. afterEach에 repository.clearStore로 repository비워줌

 

4. 그러면 순서에 상관 없어짐.

 

 

 

 

 

출처 : 인프런 김영한님의 강의를 수강 후 정리한 내용입니다.

 

 

 

 

꾸준히 다시보자.

 

1. 220712

2. 220731

 

 

 

'강의 내용 정리 > 스프링 입문' 카테고리의 다른 글

회원 서비스 테스트  (0) 2022.07.10
회원 서비스개발  (0) 2022.07.05
회원 도메인과 리포지토리 만들기  (0) 2022.07.04
API  (0) 2022.07.04
MVC와 템플릿 엔진  (0) 2022.07.04
Recent Posts
Popular Posts
Recent Comments