본문 바로가기

개발(합니다)/시나브로(이슈)

[Junit] Spring DataJPATest 슬라이싱 테스트 : .impl.JPAQueryFactory' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

반응형

상황

@DataJpaTest(properties = {
        "spring.config.location=classpath:application-test.yml"
})

JPA만 테스트 하기 위해서 @DataJPATest를 선언하고
application-test.yml을 바로보도록 설정하고
빈을 찾을 수 없다고 에러가 발생했습니다.

문제 파악

환경설정이 Test로 되어 있고 @DataJPATest는 Spring의 빈이 아닌 JPA단만 테스트 합니다.
test 패키지가 아닌 main 패키지에 있다고 해도 JPAQueryFactory를 찾을 수 없습니다.

해결 방법

패키지 구성

  1. test 패키지 아래에 Test를 위한 TestConfig를 선언
  2. TestConfig에서 JPAQueryFactory를 주입
  3. @DataJPATest에서 @Import(TestConfig.class) 선언

TestConfig.java

@TestConfiguration
public class TestConfig {

    @PersistenceContext
    private EntityManager entityManager;

    @Bean
    public JPAQueryFactory queryFactory() {
        return new JPAQueryFactory(entityManager);
    }
}

AdminInfoTest.java

@DataJpaTest(properties = {
        "spring.config.location=classpath:application-test.yml"
})
@Import(TestConfig.class)
@ExtendWith(SpringExtension.class)
@DisplayName("관리자 정보 테스트")
public class AdminInfoTest {

 

반응형