Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SpringBoot
- 김영한
- Thymeleaf
- JDBC
- java
- 자바
- Spring Boot
- 스프링
- Greedy
- 백준
- Android
- spring
- jpa
- 스프링 핵심 기능
- Exception
- 인프런
- transaction
- 그리디
- kotlin
- pointcut
- db
- Proxy
- AOP
- QueryDSL
- http
- Servlet
- 스프링 핵심 원리
- 알고리즘
- springdatajpa
- JPQL
Archives
- Today
- Total
개발자되기 프로젝트
Test 추가, gerResultList() 본문
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()
'Project > 블로그 게시판 만들기' 카테고리의 다른 글
This application has no explicit mapping for /error, so you are seeing this as a fallback. (0) | 2021.10.16 |
---|---|
Optional (0) | 2021.10.16 |
SpringInterceptor (0) | 2021.10.15 |
관리자 권한 (0) | 2021.10.14 |
인증처리 - 본인이 작성한 것만.. (0) | 2021.10.13 |
Comments