프로그래밍/spring

테스트 코드(Test code) 전용 데이터베이스(DB) 사용하기

승민아 2024. 9. 11. 18:09

에러 발생

테스트 코드를 실행하는데 잘 되던 테스트 코드가 갑자기 안된다...!

단건 검색 쿼리에 결과가 2개가 나온다고한다.

 

findByName 메서드 에러

문제가 발생한 코드 라인이다.

태그의 name을 검색하여 태그를 찾는 코드인데

여기서 2개의 태그가 반환된다는 것이다.

 

@BeforeEach
public void setup() {
    
    Tag tag = new Tag();
    tag.setName("여행");
    tagRepository.save(tag);

}

테스트 코드의 @BeforeEach문에서 태그의 name이 "여행"인 엔티티를 저장한다.

 

그런데 이미 로컬 환경에서 태그의 name이 "여행"이 이미 존재하는 상황이다.

그래서 단건 조회의 쿼리가 여러개의 결과를 반환하는 에러가 발생한 것이다.

 

DB 테이블 생성시 제약조건에 name의 중복을 허용된 상황이라 더욱 문제를 초기에 잡지 못한 것 같다.

테스트를 위한 테이블이나 데이터베이스를 생성하여 사용할 순 없을까?

 

격리된 테스트 환경

간단하게 테스트 전용 환경을 만드는 방법으로

테스트를 위한 데이터베이스를 연결할 수 있다.

 

test 디렉토리에 resources - application.properties 생성

테스트 디렉토리 아래에 resources 폴더를 만들고 application.properties를 생성하여 테스트용 설정 환경을 만들 수 있다.

 

테스트용 application.properties

테스트 데이터베이스를 생성하고, 이 데이터베이스를 datasource로 지정해주면 된다.

 

테스트 전용 데이터베이스

이제 테스트 코드 실행시 환경은 테스트 데이터베이스를 사용한다.

비로서 완벽하게 테스트 환경을 격리할 수 있게 되었다.