Test ve Entegrasyon
Coddy'nin Python Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 60 / 64.
Görev
OrtaBu meydan okumada, kapsamlı test kapsamına sahip çok dosyalı bir kütüphane sistemi uygulayacaksın. Uygulamanı yönlendiren ayrıntılı TODO yorumlarını içeren, yalnızca okunabilir üç dosya ve düzenlenebilir bir dosyayla çalışacaksın:
- book.py - Book sınıfı tanımını içerir
- user.py - Uygulaman gereken User sınıfını içerir
- library.py - Library sınıfı tanımını içerir
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)}")Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerself ParametresiMetotlarÖzniteliklerYapıcı Metot (__init__)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımsuper() FonksiyonuMetot Geçersiz KılmaÇoklu KalıtımMetot Çözümleme SırasıÖzet - Çalışan Hiyerarşisi7Özel Metotlar
Sihirli Metotlara GirişOperatör Aşırı YüklemeKapsayıcı Sihirli MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım kalıplarına girişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı13Final Meydan Okumaları
E-öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi5Çok Biçimlilik (Polymorphism)
Metot Geçersiz Kılmaya Yeniden BakışDuck TypingSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon ve KalıtımMixinsStatik ve Sınıf MetotlarıSınıf DekoratörleriBağlam Yöneticileri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı3Sınıf Özellikleri
Örnek ve Sınıf DeğişkenleriProperty DekoratörleriGizli ÖzniteliklerÖzet - Banka Hesabı Yöneticisi6Kapsülleme
Public, Protected, Private ÜyelerErişim BelirleyicilerBilgi Gizlemeİleri Seviye Property DekoratörleriÖzet - Öğrenci Kayıt Sistemi12Proje: Kütüphane Yönetimi
Projeye Genel BakışKitap ve Kullanıcı SınıflarıÖdünç Alma SistemiArama İşlevselliğiYönetici ArayüzüTest ve EntegrasyonKendi başına pratik yap: Online Python derleyicisi