[ERROR] JUnit @DataJpaTest NoSuchBeanDefinitionException

반응형

1. 문제

JUnit에서 @DataJpaTest를 사용해서 Repository를 테스트하는 경우 아래와 같이 JPAQueryFactory Bean을 찾을 수 없다는 에러가 발생할 수 있다.

image.png

2. 원인

@DataJpaTest를 사용하는 경우, 별도의 스프링 bean을 등록하지 않고 Repository만 테스트한다.

따라서 스프링 bean인 JPAQueryFactory를 @Autowired로 선언해 놓았을경우 inject 하지 못해 에러가 발생하게 된다.

변경전 CustomImpl 클래스는 아래와 같다.

public class MissionRepositoryCustomImpl extends QuerydslRepositorySupport implements MissionRepositoryCustom {

    @Autowired
    private JPAQueryFactory queryFactory;

    public MissionRepositoryCustomImpl(JPAQueryFactory jpaQueryFactory){
        super(Mission.class);
        this.queryFactory = jpaQueryFactory;
    }
}

3. 해결

아래와 같이 EntitiyManager를 @Autowired로 inject하고, 생성자에서 직접 JPAQueryFactory를 주입하면 해결된다.

public class MissionRepositoryCustomImpl extends QuerydslRepositorySupport implements MissionRepositoryCustom {

    @Autowired
    pirvate EntityManager em;

    private JPAQueryFactory queryFactory;

    public MissionRepositoryCustomImpl(){
        super(Mission.class);
        this.queryFactory = new JPAQueryFactory(em);
    }
}

참고 : https://www.inflearn.com/questions/23063


추천서적

 

스프링 부트와 AWS로 혼자 구현하는 웹 서비스

COUPANG

www.coupang.com

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음


반응형

댓글

Designed by JB FACTORY