강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của dbsdudxor1219267
dbsdudxor1219267

câu hỏi đã được viết

Trong thực tế! Phát triển ứng dụng quản lý thư viện với Kotlin và Spring Boot (tái cấu trúc dự án Java)

Bài học 9. Viết bài kiểm tra chức năng dành riêng cho sách

returnBookTest 질문드립니다.

Viết

·

527

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
    }
spring-bootkotlinspringjavarefactoring

Câu trả lời 2

2

lannstark님의 프로필 이미지
lannstark
Người chia sẻ kiến thức

안녕하세요! 돌아온무리뉴님~!!! 크으~~ 너무너무 좋은 질문이십니다 👍👍👍

 

관련해서 보여드리고 싶은 코드와 내용이 많아, 영상을 촬영해보았는데요!

 

글로도 간단히 말씀드리자면, 혹시 테스트 코드를 실행시킬 때 @Transactional을 사용하고 있지는 않으신지 확인해보시면 좋을 것 같습니다!! (연관관계가 잘 맺어져 있다는 가정 하에요!!! ㅎㅎㅎㅎ)

말씀해주신 에러는 @Transactional을 테스트 코드에 붙일 경우 나올 수 있거든요!!!

 

보다 자세한 내용은 아래의 영상을 참조해주시면 감사드리겠습니다~!!!

 

더 궁금한 점 있으시다면 편하게 질문 남겨주세요!!!

감사합니다~ 편안한 밤 되세요!! 🙏

1

dbsdudxor1219267님의 프로필 이미지
dbsdudxor1219267
Người đặt câu hỏi

정확하게 말씀해주신 부분이 맞네요...!!! 무의식적으로 @Transactional을 쓰고 있었는데 생각보다 고민할 부분이 많았네요!! 강사님 덕분에 잘 배워갑니다 감사합니다 ㅎㅎ

lannstark님의 프로필 이미지
lannstark
Người chia sẻ kiến thức

아 찾으셨군요~~ 다행입니다 ㅎㅎㅎㅎ 넵넵!!! 확실히 자동으로 해주는게 많은 만큼, 고민할 부분이 많더라고요!

언제든 또 편하게 질문 주세요! 감사합니다!! 😊

Hình ảnh hồ sơ của dbsdudxor1219267
dbsdudxor1219267

câu hỏi đã được viết

Đặt câu hỏi