Menu
CoddyTech

Kiểm thử và tích hợp

Thuộc phần Lập trình hướng đối tượng trong hành trình Python của Coddy. Bài học 60 trên 64.

challenge icon

Thử thách

Trung bình

Trong thử thách này, bạn sẽ triển khai một hệ thống thư viện gồm nhiều tệp với phạm vi kiểm thử toàn diện. Bạn sẽ làm việc với ba tệp chỉ đọc và một tệp có thể chỉnh sửa, trong đó có các chú thích TODO chi tiết hướng dẫn cách triển khai:

  • book.py - Chứa định nghĩa lớp Book
  • user.py - Chứa lớp User mà bạn cần triển khai
  • library.py - Chứa định nghĩa lớp Library

Tự làm thử

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

# Xử lý test case
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")
    
    # Thêm sách và người dùng
    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)
    
    # Mượn sách
    library.borrow_book("123456", "U001")
    library.borrow_book("789012", "U001")
    library.borrow_book("345678", "U001")
    
    print(f"Books borrowed before: {len(user.books_borrowed)}")
    
    # Trả tất cả sách
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")
    
    # Kiểm tra xem tất cả sách có sẵn không
    for book in library.books:
        print(f"Book {book.isbn} available: {book.available}")

elif test_case == "return_some_books":
    library = Library("Community Library")
    
    # Thêm sách và người dùng
    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)
    
    # Chỉ mượn một cuốn sách
    library.borrow_book("123456", "U001")
    
    print(f"Books borrowed before: {len(user.books_borrowed)}")
    
    # Trả tất cả sách
    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)}")
    
    # Trả tất cả sách (kết quả phải là 0)
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")

elif test_case == "multiple_users":
    library = Library("Community Library")
    
    # Thêm sách
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # Thêm người dùng
    user1 = User("U001", "Alice")
    user2 = User("U002", "Bob")
    library.add_user(user1)
    library.add_user(user2)
    
    # Mượn sách
    library.borrow_book("123456", "U001")
    library.borrow_book("789012", "U002")
    
    print(user1)
    print(user2)
    
    # Trả tất cả sách của 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")
    
    # Thêm sách và người dùng
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Thử mượn sách không tồn tại
    result = library.borrow_book("999999", "U001")
    print(result)
    
    # Thử mượn sách cho người dùng không tồn tại
    result = library.borrow_book("123456", "U999")
    print(result)
    
    # Mượn sách hiện có
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # Thử mượn lại cùng một cuốn sách
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # Thử trả một cuốn sách chưa mượn
    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)
    
    # Thêm 100 cuốn sách
    for i in range(1, 101):
        isbn = f"{i:03d}"  # Định dạng thành 001, 002, v.v.
        library.add_book(Book(f"Book {i}", f"Author {i}", isbn))
        library.borrow_book(isbn, "U001")
    
    print(f"Books borrowed: {len(user.books_borrowed)}")
    
    # Trả tất cả sách
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Python online