인프런 커뮤니티 질문&답변

이동명님의 프로필 이미지

작성한 질문수

실전! Querydsl

@DataJpaTest

20.01.30 01:53 작성

·

3.8K

1

QueryDsl 강의 잘듣고 있습니다!

QueryDsl을 사용하면 @DataJpaTest를 사용하지 못하나요?

JPAQueryFactory에 대해서 NoSuchBeanDefinitionException이 발생하는데 따로 주입하는 방법을 모르겠습니다ㅠㅠ

답변 2

4

김영한님의 프로필 이미지
김영한
지식공유자

2020. 02. 03. 01:45

안녕하세요. 동명님 답변이 늦었습니다.

@DataJpaTest를 사용하면 별도의 스프링 빈을 등록하지 않고, 엔티티들과 EntityManager 정도만 등록해서 테스트하게 됩니다.

JPAQueryFactory도 별도의 빈을 등록하는 것이기 때문에 동작하기 않습니다.

EntityManager는 주입받을 수 있으므로 다음과 같이 테스트 코드를 작성하시면 됩니다.

package study.querydsl;

import com.querydsl.jpa.impl.JPAQueryFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import study.querydsl.entity.Member;
import study.querydsl.entity.QMember;

import javax.persistence.EntityManager;

import static org.assertj.core.api.Assertions.*;

@DataJpaTest
public class HelloDataJpaTest {

@Autowired EntityManager em;
JPAQueryFactory queryFactory;

@BeforeEach
public void init() {
queryFactory = new JPAQueryFactory(em);
}

@Test
public void helloQueryFactory() {
Member newMember = new Member("user1");
em.persist(newMember);

Member findMember = queryFactory
.selectFrom(QMember.member)
.fetchOne();

assertThat(findMember).isEqualTo(newMember);
}
}

감사합니다^^

0

이동명님의 프로필 이미지
이동명
질문자

2020. 02. 05. 13:51

감사합니다!