@DataJpaTest와 QueryDSL 통합

greenTea·2023년 11월 30일
0

@DataJpaTest와 QueryDSL 통합하기

@DataJpaTest

🤔Spring Boot에서는 @DataJpaTest 어노테이션을 통해 JPA 관련 구성 요소만 로드하여 리포지토리 계층의 테스트를 간소화할 수 있습니다. 이 어노테이션은 데이터베이스 연결과 JPA 구성에 중점을 두어 테스트 환경을 구축합니다.

QueryDSL과 @DataJpaTest` 사용시 문제

😭QueryDSL은 타입 안전성을 제공하며 복잡한 쿼리 작성을 용이하게 하는 훌륭한 도구입니다. 하지만 @DataJpaTest와 함께 사용할 때, QueryDSL 설정을 별도로 추가해야 하는 문제가 있습니다. (위에서 말했듯이 jpa관련 설정만 가져오기 때문에 querydsl을 찾지 못했다는 에러가 발생합니다.)

TestConfiguration 사용하기

이 문제를 해결하기 위한 간단한 방법은 TestConfiguration을 정의하는 것입니다. 다음은 그 예시입니다:

Test 전용 config파일 생성

import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;

@TestConfiguration
public class DataConfig {

    @PersistenceContext
    private EntityManager entityManager;

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

🫠@TestConfiguration을 통해 테스트에서만 설정할 config파일을 만들어줍니다. 이후 해당 클래스를 import해서 사용해주면 됩니다.

Import

@Import(DataConfig.class)
@DataJpaTest
class MyTest {
	...
}

😎이 설정을 통해, EntityManager를 활용하여 JPAQueryFactory 빈을 생성하고, 이를 테스트 환경에 통합할 수 있습니다.

마치며

🥳@DataJpaTest와 QueryDSL을 함께 사용하는 것은 Spring Boot에서 JPA 테스트를 강화하는 데 매우 유용합니다. 위에서 제시한 방법을 통해 두 기술을 효과적으로 통합하고, 더 강력하고 유연한 테스트 환경을 구축할 수 있습니다.

profile
greenTea입니다.

0개의 댓글