QueryDSL을 적용한 Repository 테스트를 진행하는데 있어 다음과 같은 에러를 만났다. QueryDSL Configuration을 설정했는데도 다음과 같은 에러가 발생한다.
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in com.codereview.board.repository.board.BoardRepositoryImpl required a bean of type 'com.querydsl.jpa.impl.JPAQueryFactory' that could not be found.
Action:
Consider defining a bean of type 'com.querydsl.jpa.impl.JPAQueryFactory' in your configuration.
현재 JPA와 QueryDSL을 사용하고 있는 구조는 다음과 같다.
BoardRepository가 BoardRepositoryCustom을 extends 받고 있기 때문에 QueryDSL이 적용된 BoardRepositoryImpl때문에 발생하게 된다.
@DataJpaTest
public class BoardRepositoryTest {
@Autowired
private BoardRepository boardRepository;
}
테스트 환경에서 해당 빈을 못 찾는 이유이기 때문에 test 환경을 위한 빈 등록을 수행하면 된다.
TestConfig를 설정하기 위해 test 폴더 아래에 작성해야한다.
@TestConfiguration
public class TestConfig {
@PersistenceContext
private EntityManager entityManager;
@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(entityManager);
}
}
@PersistenceContext
: EntityManager를 빈으로 주입할 때 사용하는 어노테이션
@Import({TestConfig.class})
@DataJpaTest
public class BoardRepositoryTest {
@Autowired
private BoardRepository boardRepository;
}
TestConfig를 설정한 Configuration을 @Import 어노테이션을 이용하여 설정값들을 불러온다. 이후 QueryDSL을 이용한 테스트 코드는 정상적으로 실행되게 된다.