QueryDSL TEST @TestConfiguration

박윤택·2022년 11월 15일
0

Spring

목록 보기
16/18

Repository 슬라이스 테스트

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때문에 발생하게 된다.

  • Repository Test
@DataJpaTest
public class BoardRepositoryTest {
  @Autowired
  private BoardRepository boardRepository;
}

테스트 환경에서 해당 빈을 못 찾는 이유이기 때문에 test 환경을 위한 빈 등록을 수행하면 된다.

TestConfiguration 설정

  • 경로

TestConfig를 설정하기 위해 test 폴더 아래에 작성해야한다.

  • TestConfig 작성
@TestConfiguration
public class TestConfig {
  @PersistenceContext
  private EntityManager entityManager;

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

@PersistenceContext: EntityManager를 빈으로 주입할 때 사용하는 어노테이션

Test 코드 수정

@Import({TestConfig.class})
@DataJpaTest
public class BoardRepositoryTest {
  @Autowired
  private BoardRepository boardRepository;
}

TestConfig를 설정한 Configuration을 @Import 어노테이션을 이용하여 설정값들을 불러온다. 이후 QueryDSL을 이용한 테스트 코드는 정상적으로 실행되게 된다.

0개의 댓글