Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

Test 추가, gerResultList() 본문

Project/블로그 게시판 만들기

Test 추가, gerResultList()

Seung__ 2021. 10. 16. 11:46

1. 검색 기능 테스트


  • 제목 검색을 사용할 때 아래 메서드를 호출하게 된다.
  • Repository에서 Optional로 반환하고, null인 경우에 NoresultException을 반환한다.
    @Override
    public Optional<List<Post>> findByTitleContains(String keyword) {
        String query = "%"+keyword+"%";
        log.info("query: {}", query);
        return Optional.ofNullable(
                em.createQuery("select p from Post p where p.title like :keyword", Post.class)
                .setParameter("keyword", query)
                .getResultList());
    }
   @Override
    public List<Post> findByTitleContains(String title) {
        return postRepository.findByTitleContains(title).orElseThrow(NoResultException::new);
    }

 

  • 그래서 결과가 없는 경우를 가정해서 아래처럼 테스트를 작성했다.
  • 임의의 제목을 검색했을 때 해당 String을 포함하지 않는 경우는 NoresultException이 발생할 것으로 예상함.
   @Test
    void findByTitleContainsTestNoResult(){
        //given
        String title = "NoResultPLZ";

        //when
        assertThrows(NoResultException.class, () -> postService.findByTitleContains(title));
    }
  • 음?? Exception이 안터진다..
org.opentest4j.AssertionFailedError: Expected javax.persistence.NoResultException to be thrown,
but nothing was thrown.
  • Repository에서 쿼리를 날리고 getResultLIst()를 호출하는데, 해당 메서드를 통해서 List객체가 만들어 진다.
  • 이 때 List객체가 만들어 지기 때문에, 쿼리로 검색된 결과가 없는 경우 빈 List객체로 넘어오는 것 같다.
  • 아래와 같이 test를 수정해보자.
    @Test
    void findByTitleContainsTestNoResult(){
        //given
        String title = "NoResultPLZ";

        //when
        List<Post> results = postService.findByTitleContains(title);
        
        //then
        assertThat(results.isEmpty()).isTrue();
    }
  • 결과는 성공

 

 

 

2. 정리


  • getResultList()를 호출하는 경우 query 결과가 없더라고 빈 List가 반환됨.
    @Override
    public Optional<List<Post>> findByTitleContains(String keyword) {
        String query = "%"+keyword+"%";
        log.info("query: {}", query);
        return Optional.ofNullable(
                em.createQuery("select p from Post p where p.title like :keyword", Post.class)
                .setParameter("keyword", query)
                .getResultList());
    }

 

 

3. GitHub: 211016 getResultList()


 

GitHub - bsh6463/blog

Contribute to bsh6463/blog development by creating an account on GitHub.

github.com

 

Comments