• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

@DataJpaTest

20.01.30 01:53 작성 조회수 3.55k

1

QueryDsl 강의 잘듣고 있습니다!

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

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

답변 2

·

답변을 작성해보세요.

4

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

@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

감사합니다!