@DataJpaTest
🤔Spring Boot에서는 @DataJpaTest
어노테이션을 통해 JPA 관련 구성 요소만 로드하여 리포지토리 계층의 테스트를 간소화할 수 있습니다. 이 어노테이션은 데이터베이스 연결과 JPA 구성에 중점을 두어 테스트 환경을 구축합니다.
😭QueryDSL은 타입 안전성을 제공하며 복잡한 쿼리 작성을 용이하게 하는 훌륭한 도구입니다. 하지만 @DataJpaTest
와 함께 사용할 때, QueryDSL 설정을 별도로 추가해야 하는 문제가 있습니다. (위에서 말했듯이 jpa관련 설정만 가져오기 때문에 querydsl을 찾지 못했다는 에러가 발생합니다.)
이 문제를 해결하기 위한 간단한 방법은 TestConfiguration
을 정의하는 것입니다. 다음은 그 예시입니다:
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(DataConfig.class)
@DataJpaTest
class MyTest {
...
}
😎이 설정을 통해, EntityManager
를 활용하여 JPAQueryFactory
빈을 생성하고, 이를 테스트 환경에 통합할 수 있습니다.
🥳@DataJpaTest
와 QueryDSL을 함께 사용하는 것은 Spring Boot에서 JPA 테스트를 강화하는 데 매우 유용합니다. 위에서 제시한 방법을 통해 두 기술을 효과적으로 통합하고, 더 강력하고 유연한 테스트 환경을 구축할 수 있습니다.