No qualifying bean of type 'com.querydsl.jpa.impl.JPAQueryFactory' available: expected at least 1 bean which qualifies as autowire candidate

공부는 혼자하는 거·2022년 4월 21일
0

에러모음

목록 보기
14/28

JPA Test code 작성 중 아래와 같은 에러가 터졌다.

Failed to replace DataSource with an embedded database for tests. If you want an embedded database please put a supported one on the classpath or tune the replace attribute of @AutoConfigureTestDatabase.

에러로그를 찬찬히 읽어보니.. AutoConfigureTestDatabase 옵션을 바꾸라고 얘기해준다..

ANY 옵션은 임베디드 DB(H2.. 같은) 가 있어야 대체된다고 하드라.. 그동안 습관적으로 H2를 깔고 시작했기 때문에 이 간단한 옵션 조차 잊어먹고 있었다.

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)

NONE으로 바꿔서 실제 지금 연동중인 DB환경에서 테스트해보기로 했다. 그러니 위의 제목과 같은 에러가 떴다.
찾아보니, @DataJpaTest를 사용하면 별도의 스프링 빈을 등록하지 않고, 엔티티들과 EntityManager 정도만 등록해서 테스트하게 된다고 하드라. 별도로 빈을 주입시켜야 될 필요가 생겼다. 그래서 testConfig를 하나 만들었다.

@TestConfiguration
public class TestConfig {

    @PersistenceContext
    private EntityManager entityManager;

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

    @Bean
    public QuerydslOrderRepositoryImpl querydslOrderRepository(){
        return new QuerydslOrderRepositoryImpl(jpaQueryFactory(), entityManager);
    }

}

테스트 할려는 클래스에 import

@Transactional
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@DataJpaTest // Repository들을 다 IOC 등록해둠.
@Import(TestConfig.class)
class ItemRepositoryUnitTest {

    @Autowired
    private ItemRepository itemRepository;
    

    @Test
    public void saveTest() {
        //BDDMocikto 방식

        //given
        Item item = new Food();
        item.setName("test1");
        //when
        Item save = itemRepository.save(item);

        //then
        Assertions.assertThat(save.getName()).isEqualTo("test1");  //왼쪽인자가 내가 기대하는 값, 오른쪽인자가 실제 값 = 둘이 동일하면 true 리턴(테스트 성공!)
    }



}

참고

https://www.inflearn.com/questions/23063
https://velog.io/@ewan/Test-Case-%EC%97%90%EC%84%9C-JPAQueryFactory-%EC%97%90%EB%9F%AC-%EB%B0%9C%EC%83%9D

profile
시간대비효율

0개의 댓글