테스트 코드 의존 관계 초기화 - AfterEach

초코칩·2023년 1월 5일
1

spring

목록 보기
1/7
post-thumbnail

문제

사용자 idname을 매핑하여 사용자 이름을 저장하는 save(), 이름으로 사용자를 찾는 findByName(), 전체 사용자를 조회하는 findAll()이 있습니다.

테스트 케이스 작성 중, 메서드 별 테스트 코드는 통과하지만 전체 테스트에서 실패합니다.

단일 테스트 케이스 실행

전체 테스트 케이스 실행

분석

전체 테스트 코드 실행 순서를 보장하지 않습니다.


위에서 보면 findAll()이 가장 먼저 실행되었습니다. 이 테스트에서 nameSpring1이라는 Member가 저장됩니다. 그 후, findByName()에서 테스트를 위해 다시 Spring1 Member를 생성하게 되어 저장소에는 두 명의 Spring1 Member가 존재하게 됩니다.

캐시가 남아있습니다.

테스트 코드는 실행에 있어 의존 관계없이 실행되어야 합니다. 위 실행에서는 공용 저장소인 hashmap에 이전 테스트 코드의 실행 캐시가 남아있습니다.

해결

AfterEach는 각 테스트 함수 완료 후에 특정 함수를 실행합니다. 캐시가 남아있는 것이 문제이기 때문에 AfterEach를 활용하여 hashmap 저장소를 초기화합니다.

초기화 함수 정의

캐시 초기화할 함수를 메인 repository에 작성합니다.

//com.example.demo.repository.MemoryMemberRepository.java

public void clearStore(){
	store.clear();
}

AfterEach 적용

Test Repository에 AfterEach를 추가합니다. 매 테스트 코드마다 캐시를 초기화하게 됩니다.

@AfterEach
public void afterEach(){
    repository.clearStore();
}

결과

profile
초코칩처럼 달콤한 코드를 짜자

0개의 댓글