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
'Java, Spring > 스프링 입문' 카테고리의 다른 글
회원 서비스 테스트 (0) | 2022.07.10 |
---|---|
회원 서비스개발 (0) | 2022.07.05 |
회원 도메인과 리포지토리 만들기 (0) | 2022.07.04 |
API (0) | 2022.07.04 |
MVC와 템플릿 엔진 (0) | 2022.07.04 |