사용자 id
과 name
을 매핑하여 사용자 이름을 저장하는 save()
, 이름으로 사용자를 찾는 findByName()
, 전체 사용자를 조회하는 findAll()
이 있습니다.
테스트 케이스 작성 중, 메서드 별 테스트 코드는 통과하지만 전체 테스트에서 실패합니다.
위에서 보면 findAll()
이 가장 먼저 실행되었습니다. 이 테스트에서 name
이 Spring1
이라는 Member가 저장됩니다. 그 후, findByName()
에서 테스트를 위해 다시 Spring1
Member를 생성하게 되어 저장소에는 두 명의 Spring1
Member가 존재하게 됩니다.
테스트 코드는 실행에 있어 의존 관계없이 실행되어야 합니다. 위 실행에서는 공용 저장소인 hashmap에 이전 테스트 코드의 실행 캐시가 남아있습니다.
AfterEach는 각 테스트 함수 완료 후에 특정 함수를 실행합니다. 캐시가 남아있는 것이 문제이기 때문에 AfterEach를 활용하여 hashmap 저장소를 초기화합니다.
캐시 초기화할 함수를 메인 repository에 작성합니다.
//com.example.demo.repository.MemoryMemberRepository.java
public void clearStore(){
store.clear();
}
Test Repository에 AfterEach를 추가합니다. 매 테스트 코드마다 캐시를 초기화하게 됩니다.
@AfterEach
public void afterEach(){
repository.clearStore();
}