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

최형택님의 프로필 이미지
최형택

작성한 질문수

실전! Querydsl

동적 쿼리와 성능 최적화 조회 - Builder 사용

SearchTest 질문입니다

작성

·

342

1


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]

@Test
public void searchTest() {



    Team teamA = new Team("teamA");
    Team teamB = new Team("teamB");
    em.persist(teamA);
    em.persist(teamB);


    Member member1 = new Member("member1", 10, teamA);
    Member member2 = new Member("member2", 20, teamA);
    Member member3 = new Member("member3", 30, teamB);
    Member member4 = new Member("member4", 40, teamB);
    em.persist(member1);
    em.persist(member2);
    em.persist(member3);
    em.persist(member4);

    MemberSearchCondition condition = new MemberSearchCondition();
    condition.setAgeGoe(35);
    condition.setAgeLoe(40);
    condition.setTeamName("teamB");

    List<MemberTeamDto> result = memberJpaRepository.searchByBuilder(condition);

    Assertions.assertThat(result).extracting("username").containsExactly("member4");





}

테스트를 돌렸는데 member4만 가지고있다고 밑의 에러가 발생했습니다 . jparepository의 메서드 문제일까요??

스크린샷 2023-04-25 오후 1.19.29.png

 

아래는 memberjparepository입니다

public List<MemberTeamDto> searchByBuilder(MemberSearchCondition condition) {

    BooleanBuilder builder = new BooleanBuilder();
    if(hasText(condition.getUsername())){
        builder.and(member.username.eq(condition.getUsername()));

    }
    if(hasText(condition.getTeamName())){

        builder.and(team.name.eq(condition.getTeamName()));
    }
    if(condition.getAgeGoe() != null) {
        builder.and(member.age.goe(condition.getAgeGoe()));
    }
    if(condition.getAgeGoe() != null) {
        builder.and(member.age.goe(condition.getAgeLoe()));
    }

    return queryFactory
            .select(new QMemberTeamDto(
                    member.id.as("memberId"),
                    member.username,
                    member.age,
                    team.id.as("teamId"),
                    team.name.as("teamName")

            ))
            .from(member)
            .leftJoin(member.team, team)
            .fetch();


}

 


답변 1

1

안녕하세요, 최형택 님. 공식 서포터즈 y2gcoder 입니다.

보여주신 테스트의 검증 부를 보면 username이 정확히 member4만 있어야 하는 것으로 검증하신 것 같고, 실패 로그를 보니 member4만 있어야 하는데 member1, member2, member 3도 같이 있어서 해당 테스트가 실패했다고 나오는 것으로 보입니다.

그리고 searchBuilder 코드를 보시면 만든 빌더를 적용하고 계시지 않은 것으로 보이는데 한번 where 절에 만드신 builder를 적용하시고 다시 테스트를 해보시는 것을 권장합니다!

감사합니다.

최형택님의 프로필 이미지
최형택
질문자

감사합니다

파이팅입니다!

최형택님의 프로필 이미지
최형택

작성한 질문수

질문하기