Menu
Coddy logo textTech

테스트 및 통합

Coddy Python 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 64개 중 60번째.

challenge icon

챌린지

중급

이 챌린지에서는 포괄적인 테스트 커버리지를 갖춘 다중 파일 라이브러리 시스템을 구현하게 됩니다. 세 개의 읽기 전용 파일과 구현을 안내하는 상세한 TODO 주석이 포함된 하나의 편집 가능한 파일을 사용하여 작업하게 됩니다:

  • book.py - Book 클래스 정의를 포함합니다
  • user.py - 구현해야 할 User 클래스를 포함합니다
  • library.py - Library 클래스 정의를 포함합니다

치트 시트

이 챌린지는 세 가지 주요 구성 요소로 이루어진 다중 파일 라이브러리 시스템을 구현하는 것을 포함합니다:

  • book.py - Book 클래스 정의
  • user.py - User 클래스 구현
  • library.py - Library 클래스 정의

구현에는 포괄적인 테스트 커버리지가 포함되어야 하며 각 파일에 제공된 TODO 주석을 따라야 합니다.

직접 해보기

from book import Book
from user import User
from library import Library

# 테스트 케이스 핸들러
test_case = input()

if test_case == "create_user":
    user_id = "1"
    name = "Name"
    
    user = User(user_id, name)
    print(user)
    print(f"Books borrowed: {len(user.books_borrowed)}")

elif test_case == "borrow_and_return_all":
    library = Library("Community Library")
    
    # 도서 및 사용자 추가
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    library.add_book(Book("1984", "George Orwell", "345678"))
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    # 도서 대출
    library.borrow_book("123456", "U001")
    library.borrow_book("789012", "U001")
    library.borrow_book("345678", "U001")
    
    print(f"Books borrowed before: {len(user.books_borrowed)}")
    
    # 모든 도서 반납
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")
    
    # 모든 도서의 대출 가능 여부 확인
    for book in library.books:
        print(f"Book {book.isbn} available: {book.available}")

elif test_case == "return_some_books":
    library = Library("Community Library")
    
    # 도서 및 사용자 추가
    book1 = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
    book2 = Book("To Kill a Mockingbird", "Harper Lee", "789012")
    library.add_book(book1)
    library.add_book(book2)
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    # 도서 한 권만 대출
    library.borrow_book("123456", "U001")
    
    print(f"Books borrowed before: {len(user.books_borrowed)}")
    
    # 모든 도서 반납
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")

elif test_case == "empty_return":
    library = Library("Community Library")
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    print(f"Books borrowed: {len(user.books_borrowed)}")
    
    # 모든 도서 반납 (0이어야 함)
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")

elif test_case == "multiple_users":
    library = Library("Community Library")
    
    # 도서 추가
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # 사용자 추가
    user1 = User("U001", "Alice")
    user2 = User("U002", "Bob")
    library.add_user(user1)
    library.add_user(user2)
    
    # 도서 대출
    library.borrow_book("123456", "U001")
    library.borrow_book("789012", "U002")
    
    print(user1)
    print(user2)
    
    # user1의 모든 도서 반납
    num_returned = user1.return_all_books(library)
    
    print(f"Books returned by {user1.name}: {num_returned}")
    
    print(user1)
    print(user2)

elif test_case == "error_handling":
    library = Library("Community Library")
    
    # 도서 및 사용자 추가
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    user = User("U001", "Alice")
    library.add_user(user)
    
    # 존재하지 않는 도서 대출 시도
    result = library.borrow_book("999999", "U001")
    print(result)
    
    # 존재하지 않는 사용자에게 대출 시도
    result = library.borrow_book("123456", "U999")
    print(result)
    
    # 존재하는 도서 대출
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # 동일한 도서 중복 대출 시도
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # 대출하지 않은 도서 반납 시도
    result = library.return_book("789012", "U001")
    print(result)

elif test_case == "stress_test":
    library = Library("Community Library")
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    # 100권의 도서 추가
    for i in range(1, 101):
        isbn = f"{i:03d}"  # 001, 002 등의 형식으로 포맷팅
        library.add_book(Book(f"Book {i}", f"Author {i}", isbn))
        library.borrow_book(isbn, "U001")
    
    print(f"Books borrowed: {len(user.books_borrowed)}")
    
    # 모든 도서 반납
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")

Object Oriented Programming의 모든 레슨