작성
·
419
1
안녕하세요 강사님! 테스트 코드를 작성하던 중 문제가 발생하여 문의드립니다.
returnBookTest 상에서 UserLoanHistory가 DB에만 저장되고(90번째 줄), savedUser.userLoanHistories에는 추가가 안되어 user.returnBook을 호출하는 과정에서 NoSuchElementException이 발생하는 것 같습니다.
@Test
fun returnBookTest() {
// given
bookRepository.save(Book("이상한 나라의 엘리스"))
val savedUser = userRepository.save(User("김", null))
userLoanHistoryRepository.save(UserLoanHistory(savedUser, "이상한 나라의 엘리스", false)) // 생성한 UserLoanHistory 객체가 DB에만 저장됨
val request = BookReturnRequest("김", "이상한 나라의 엘리스")
// when
bookService.returnBook(request) // 최종적으로 user.returnBook 호출
// then
val results = userLoanHistoryRepository.findAll()
assertThat(results).hasSize(1)
assertThat(results[0].isReturn).isTrue
}
public void returnBook(String bookName) {
UserLoanHistory targetHistory = this.userLoanHistories.stream() // userLoanHistories.size() == 0
.filter(history -> history.getBookName().equals(bookName))
.findFirst()
.orElseThrow(); // 여기서 예외 발생
targetHistory.doReturn();
}
따라서 다음과 같이 수정해야 하지 않을까 싶은데 이 부분 확인 부탁드립니다!!
@Test
fun returnBookTest() {
// given
bookRepository.save(Book("이상한 나라의 엘리스"))
userRepository.save(User("김", null))
val loanRequest = BookLoanRequest("김", "이상한 나라의 엘리스")
bookService.loanBook(loanRequest)
val returnRequest = BookReturnRequest("김", "이상한 나라의 엘리스")
// when
bookService.returnBook(returnRequest)
// then
val results = userLoanHistoryRepository.findAll()
assertThat(results).hasSize(1)
assertThat(results[0].isReturn).isTrue
}
답변 2
2
안녕하세요! 돌아온무리뉴님~!!! 크으~~ 너무너무 좋은 질문이십니다 👍👍👍
관련해서 보여드리고 싶은 코드와 내용이 많아, 영상을 촬영해보았는데요!
글로도 간단히 말씀드리자면, 혹시 테스트 코드를 실행시킬 때 @Transactional을 사용하고 있지는 않으신지 확인해보시면 좋을 것 같습니다!! (연관관계가 잘 맺어져 있다는 가정 하에요!!! ㅎㅎㅎㅎ)
말씀해주신 에러는 @Transactional을 테스트 코드에 붙일 경우 나올 수 있거든요!!!
보다 자세한 내용은 아래의 영상을 참조해주시면 감사드리겠습니다~!!!
더 궁금한 점 있으시다면 편하게 질문 남겨주세요!!!
감사합니다~ 편안한 밤 되세요!! 🙏
1
정확하게 말씀해주신 부분이 맞네요...!!! 무의식적으로 @Transactional을 쓰고 있었는데 생각보다 고민할 부분이 많았네요!! 강사님 덕분에 잘 배워갑니다 감사합니다 ㅎㅎ
아 찾으셨군요~~ 다행입니다 ㅎㅎㅎㅎ 넵넵!!! 확실히 자동으로 해주는게 많은 만큼, 고민할 부분이 많더라고요!
언제든 또 편하게 질문 주세요! 감사합니다!! 😊