인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

Joshua_Kim님의 프로필 이미지
Joshua_Kim

작성한 질문수

실전! Querydsl

집합

강의듣는중에 테스트에서 갑자기 모든 테스트가 null point exception 이 뜹니다..

작성

·

316

0

안녕하세요 영한팀장님. 강의 너무 잘듣고있습니다.

갑작스럽게 어제까지 잘돌아가던 테스트가 

오늘 '집합'부분 테스트를 만들고나서 (aggregation()메소드)

queryFactory 부분에서 nullpointexception이 납니다.

혹시 QClass가 이상하게 되었나 싶어서 clean하여 다시 컴파일하고 실행해도 동일합니다.

그 전에 잘되었던 기존 테스트들도 줄줄이 똑같은 예외를 뱉으며 테스트에 실패합니다.. 이유가 무엇일까요ㅠ 2시간동안 강의못듣고 끙끙 헤매다가 처음으로 질문을 올려봅니다ㅠㅠㅠ

 

https://drive.google.com/file/d/1ad-mUAI4eRBYuNgKk72mF-MKnpNg2Bp8/view?usp=sharing

 

소스 코드 공유합니다!!

 

또한, symbol을 찾지 못하는 예외도 같이 떠서 구글링중에 인텔리제이 설정도 만져보았으나..

 

해결되지 않습니다 ㅠㅠ 

답변 3

3

안녕하세요. Joshua_Kim님, 공식 서포터즈 OMG입니다.

올리신 프로젝트 확인해보았습니다.

전체 테스트 실행 시

 

@Test
void contextLoads() {
Hello hello = new Hello();
em.persist(hello);

JPAQueryFactory query = new JPAQueryFactory(em);
// QHello qHello = new QHello("h");
QHello qHello = QHello.hello;

Hello result = query
.selectFrom(qHello)
.fetchOne();

assertThat(result).isEqualTo(hello);
assertThat(result.getId()).isEqualTo(hello.getId());
}

이 테스트가 성공하는 것으로 보아 Q클래스 생성에는 문제가 없다고 판단하고 QueryDslBasicTest를 확인해보았습니다.

IDE 상에서
@BeforeEach  //data를 미리 넣어두기 위해 세팅
public void before () {
JPAQueryFactory queryFactory = new JPAQueryFactory(em); //entity
queryFactory 가 흰색으로(사용 중이지 않음)으로 표시 되어 확인해보니

바로 위에
JPAQueryFactory queryFactory; //필드레벨로 가지고와서 이렇게 처리해도된다.
 

가 있더라구요. 필드에서 선언하고, before 메서드에서만 인스턴스를 생성하고 있습니다.

결과적으로 아래와 같이 바꾸시면 테스트 성공합니다.

resultFetch() 테스트는 실패하는데 해당 테스트는 확인해보시길 바랍니다.

 

 

JPAQueryFactory queryFactory; //필드레벨로 가지고와서 이렇게 처리해도된다.

@BeforeEach //data를 미리 넣어두기 위해 세팅
public void before () {
queryFactory = new JPAQueryFactory(em); //entitymanager를 넘겨야함

 

감사합니다.

Joshua_Kim님의 프로필 이미지
Joshua_Kim
질문자

와... 정말 감사합니다. 알고나니 정말 어이가없는데... 허허허 답변 너무나 감사합니다!

 

0

액세스가 불가능합니다.

링크 있는 사용자는 접근 가능하게 변경해주세요

Joshua_Kim님의 프로필 이미지
Joshua_Kim
질문자

https://drive.google.com/file/d/1ad-mUAI4eRBYuNgKk72mF-MKnpNg2Bp8/view?usp=sharing

 

권한 변경하여 다시 공유합니다!

 

사용하고 있는 인텔리제이는 최신버전입니다

0

안녕하세요. Joshua_Kim님, 공식 서포터즈 OMG입니다.

https://bit.ly/3fX6ygx

위 링크에서 프로젝트 공유하는 방법을 참고하여 프로젝트 링크를 공유해주세요.

 

액세스 권한 요청이 출력되지 않도록 해당 설명의 step6를 참고부탁드립니다.

감사합니다.

Joshua_Kim님의 프로필 이미지
Joshua_Kim
질문자

https://drive.google.com/file/d/1ad-mUAI4eRBYuNgKk72mF-MKnpNg2Bp8/view?usp=sharing

 

링크 공유합니다!

Joshua_Kim님의 프로필 이미지
Joshua_Kim

작성한 질문수

질문하기