Study

테스트코드에서 Entity, Component를 스캔하지 못하는 이유?

승톨이 2024. 1. 9. 16:27

테스트 코드를 실행하는 중, repository를 찾지 못하는 에러가 계속 발생했다.

어플리케이션 코드에는 repository가 분명히 있고 어플리케이션 실행도 되며, API도 정상 동작하는 것을 확인할 수 있었다. 

테스트 코드 에서만 Component 를 스캔하지 못하는 이유가 뭘까? 여러 시도를 해 보았다.

 

 

 

1. 가장 먼저 생각해 볼 수 있는 원인은 테스트 패키지의 구조 문제이다. 패키지 구조가 잘못되었나 싶어 여러번 확인했지만, 다른 프로젝트들과 비교해도 구조의 차이점은 없었다. 혹시나 하는 생각에 어플리케이션 코드와 파일 구조를 완전 동일하게도 해 봤지만 같은 결과였다. 패키지 구조 문제는 아닌 것으로 보인다.

 

 

 

 

2. 말 그대로 컴포넌트를 찾지 못하는 상황이기 때문에, 두 번째 시도로 테스트 코드에서 어플리케이션 코드의 엔티티나 컴포넌트를 스캔할 수 있도록 여러 어노테이션들을 추가해 봤다. 

@ComponentScan 과 @EntityScan 어노테이션은, basePackage 를 지정해 주면 해당 basePackage 하위의 모든 위치의 Component(Controller, Service, Repository 등) 또는 Entity 를 스캔하여 빈으로 등록해 준다. @EnableJpaRepositories 어노테이션은 basePackage 하위의 파일들을 스캔하면서 JpaRepository 를 상속받은 인터페이스를 빈으로 등록해 주는 어노테이션이다. 

 

테스트 코드 전용 설정파일을 만들고, 해당 설정을 @Import 를 사용하여 적용시켜서 com.example 하위의 모든 컴포넌트와 Repository 를 스캔하도록 설정했다.

 

테스트 전용 설정 파일

 

@Imort(TestConfig.class) 를 통해 설정 정보 적용

 

 

해당 어노테이션들을 설정 파일에 적용해도 보고, 직접 BoardServiceTest 에도 적용해 봤지만 여전히 같은 에러를 뱉었다.(...)

 

 

build.Gradle 파일도 여러 번 확인했지만, 간단한 프로젝트이기 때문에 spring-jpa 관련 의존성과 test 관련 의존성 말고는 특별하게 추가하거나 빠뜨린 것이 없었다.

이 밖에 테스트 코드를 패키지까지 전체 삭제하고 다시 구현하거나 캐시 무효화, Gradle 다시 로드 등 여러 시도를 해 봤지만 아직 해결이 되지 않았다.

 

문제가 해결되면 다시 기록해야겠다.