코틀린- 테스트코드 작성하기

박경희·2025년 4월 1일
0

강의 복습 및 정리

목록 보기
36/38

우선 기존 배웠던 것을 생각해보며 먼저 작생해 보았다.

예외 처리 테스트 코드 작성

@Test
    @DisplayName("책이 진작 대출되어 있다면, 신규 대출이 실패한다")
    fun loanBookFailTest() {
        //given
        bookRepository.save(Book("미라클모닝"))
        userRepository.save(User("솜사탕", 20))
        userRepository.save(User("달콤해", 30))
        val loanRequest1 = BookLoanRequest("솜사탕", "미라클모닝")
        val loanRequest2 = BookLoanRequest("달콤해", "미라클모닝")

        //when & then
        bookService.loanBook(loanRequest1)

        try {
            bookService.loanBook(loanRequest2)
        } catch (e: IllegalArgumentException) {
            return
        } catch (e: Exception) {
            throw IllegalStateException()
        }

given

  • 이미 대출이 되어 있어야 하기 때문에 두 명의 유저와 책 한권 저장
  • 1번 유저가 먼저 책을 빌리고
  • 2번 유저가 같은 책을 빌리려고 할 때가 이미 대출되어 있는 책을 빌리려 하는 거기 때문에 대출 실패가 되야한다.

when -then

  • 먼저 유저 1이 대출을 해가고
  • 유저2가 대출할 땐 실패가 되어야 하기 때문에 try-catch구문 안에 넣어 작성.

일단 성공 하긴 한다ㅎㅎㅎ

강의를 들어보며 정확하게 작성법을 알아보자~


userLoanHistoryRepository.save(UserLoanHistory(savedUser, "미라클모닝", false))
  • 유저가 두명이 있을 필요는 없다.
  • 이미 대출이 되어있는 상황이어야 하니까 userLoanHistoryRepository를 사용해서 이미 대출된 상태로 만들면 됐다.
  • 저장할 때 '유저이름' 이 아니라 'User'객체를 저장해야 한다.

assertThrows<IllegalArgumentException> {}
  • 처음에 위 코드까진 생각했으나 람다 작성이 기억이 안나 찾아봤는데 잘못 찾아본거 같다. 😅

책 반납 테스트 코드 작성

@Test
    @DisplayName("책 반납이 정상 동작한다")
    fun returnBookTest() {
        //given
        bookRepository.save(Book("미라클모닝"))
        val savedUser = userRepository.save(User("솜사탕", 20))
        userLoanHistoryRepository.save(UserLoanHistory(savedUser, "미라클모닝", false))
        val request = BookReturnRequest("솜사탕", "미라클모닝")

        //when
        bookService.returnBook(request)

        //then
        val result = userLoanHistoryRepository.findAll()
        assertThat(result).hasSize(1)
        assertThat(result[0].bookName).isEqualTo("미라클모닝")
        assertThat(result[0].isReturn).isTrue()
    }

일단 이것도 정상 작동은 한다.. ㅎㅎ
강의를 보며 어디가 또 오류가 있나 찾아보자~


오~~~!!

강사님 코드랑 거의 일치한다!

  • 책 정보는 필요 없다.
  • 반납된 책 이름까지 확인할 필욘 없었나보다.
    -> 반납할 때 유저쪽 정보만 가져와서 반납을 하기 때문이다.

전체 테스트 실패?!?

@AfterEach
    fun clear() {
        bookRepository.deleteAll()
        userRepository.deleteAll()
    }
  • userRepository.deleteAll() 유저 정보도 비워주자~~~!

전체 테스트 성공~~!


참고- 실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)

0개의 댓글