Menu
Coddy logo textTech

Test ve Entegrasyon

Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 60 / 64.

challenge icon

Görev

Orta

Bu meydan okumada, kapsamlı test kapsamına sahip çok dosyalı bir kütüphane sistemi uygulayacaksınız. Uygulamanıza rehberlik eden ayrıntılı TODO yorumları içeren üç salt okunur dosya ve bir düzenlenebilir dosya ile çalışacaksınız:

  • book.py - Book sınıfı tanımını içerir
  • user.py - Uygulamanız gereken User sınıfını içerir
  • library.py - Library sınıfı tanımını içerir

Kopya kağıdı

Bu meydan okuma, üç ana bileşenden oluşan çok dosyalı bir kütüphane sisteminin uygulanmasını içerir:

  • book.py - Book sınıfı tanımı
  • user.py - User sınıfı uygulaması
  • library.py - Library sınıfı tanımı

Uygulama, kapsamlı test kapsamı içermeli ve her dosyada sağlanan TODO yorumlarını takip etmelidir.

Kendin dene

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

# Test durumu işleyicisi
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")
    
    # Kitapları ve kullanıcıları ekle
    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)
    
    # Kitapları ödünç al
    library.borrow_book("123456", "U001")
    library.borrow_book("789012", "U001")
    library.borrow_book("345678", "U001")
    
    print(f"Books borrowed before: {len(user.books_borrowed)}")
    
    # Tüm kitapları iade et
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")
    
    # Tüm kitapların müsait olup olmadığını kontrol et
    for book in library.books:
        print(f"Book {book.isbn} available: {book.available}")

elif test_case == "return_some_books":
    library = Library("Community Library")
    
    # Kitapları ve kullanıcıları ekle
    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)
    
    # Sadece bir kitap ödünç al
    library.borrow_book("123456", "U001")
    
    print(f"Books borrowed before: {len(user.books_borrowed)}")
    
    # Tüm kitapları iade et
    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)}")
    
    # Tüm kitapları iade et (0 olmalı)
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")

elif test_case == "multiple_users":
    library = Library("Community Library")
    
    # Kitapları ekle
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # Kullanıcıları ekle
    user1 = User("U001", "Alice")
    user2 = User("U002", "Bob")
    library.add_user(user1)
    library.add_user(user2)
    
    # Kitapları ödünç al
    library.borrow_book("123456", "U001")
    library.borrow_book("789012", "U002")
    
    print(user1)
    print(user2)
    
    # user1 için tüm kitapları iade et
    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")
    
    # Kitap ve kullanıcı ekle
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Mevcut olmayan kitabı ödünç almayı dene
    result = library.borrow_book("999999", "U001")
    print(result)
    
    # Mevcut olmayan kullanıcı için ödünç almayı dene
    result = library.borrow_book("123456", "U999")
    print(result)
    
    # Mevcut kitabı ödünç al
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # Aynı kitabı tekrar ödünç almayı dene
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # Ödünç alınmamış bir kitabı iade etmeyi dene
    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 kitap ekle
    for i in range(1, 101):
        isbn = f"{i:03d}"  # 001, 002 vb. şeklinde formatla
        library.add_book(Book(f"Book {i}", f"Author {i}", isbn))
        library.borrow_book(isbn, "U001")
    
    print(f"Books borrowed: {len(user.books_borrowed)}")
    
    # Tüm kitapları iade et
    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 bölümündeki tüm dersler