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

조석훈님의 프로필 이미지
조석훈

작성한 질문수

스프링과 JPA 기반 웹 애플리케이션 개발

관심 주제 테스트

테스트 코드 질문있습니다.

작성

·

206

0

안녕하세요.

회원계정에 해당하는 태그를 조회하는 서비스로직 getTags에서 궁금한점이 있습니다.

저는 자바8을 사용하고있어서(sysout은 나중에 찍었습니다.)

public Set<Tag> getTags(Account account) {
        Optional<Account> byId = accountRepository.findById(account.getId());
        System.out.println("byid : " + byId.orElseThrow(NullPointerException::new).getTags());
        System.out.println(byId);
        //없으면 에러를 던지고 있으면 태그를 가져온다
        return byId.orElseThrow(NullPointerException::new).getTags();
    }

//결과값
byid : null
Optional[com.jpa.studywebapp.domain.Account@3c]

위와같이 orElseThrow에 인자를 채워서 사용했습니다

그런데 자꾸 테스트에서 NPE가 발생했는데, 신기한점은 실제로 byid는 출력이 되는데 orElseThrow().getTags를 거치면 null이 출력이됩니다.

이 부분은 Detached상태도 아닌데 왜 자꾸 NPE가 출력이 되는지 궁금합니다.

답변 2

1

백기선님의 프로필 이미지
백기선
지식공유자

NPE하고 null을 리턴한거랑은 다른건데 제가 볼 때 NPE가 발생한건 아닌거 같은데요. 다시 잘 보시기 바랍니다.

0

저같은경우 account에 Set<account> tags = new HashSet<>() 을 추가하여 해결했습니다.

조석훈님의 프로필 이미지
조석훈

작성한 질문수

질문하기