Birim Testi (NUnit/xUnit)
Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 67 / 70.
Görev
KolayBirim testleri ekleyerek Kütüphane Sistemi projenizi tamamlayalım! Test yapmak, kodunuzun doğru çalıştığından ve değişiklik yaptıkça çalışmaya devam ettiğinden emin olmak için gereklidir. Kütüphane sisteminizin temel işlevselliğini doğrulayan özel bir test dosyası oluşturacaksınız.
Mevcut proje yapınızla çalışmaya devam edecek ve yeni bir test dosyası ekleyeceksiniz:
Book.cs:Id,Title,Author,IsAvailableözelliklerine veBorrow()ileReturn()metotlarına sahip Book sınıfınızı koruyun.User.cs: Ödünç alma takibi,MaxBookssabiti,CanBorrow()ve ödünç alınan kitapları yönetmek için metotlara sahip User sınıfınızı koruyun.Library.cs: Ödünç alma mantığı, arama metotları veGetAllBooks()ileGetAllUsers()metotlarına sahip Library sınıfınızı koruyun.LibraryTests.cs: Bu sizin yeni test dosyanız! Kütüphane sisteminizin doğru çalıştığını doğrulayan bir test sınıfı oluşturun. Çeşitli senaryoları kontrol eden ve her testin geçip geçmediğini bildiren test metotları yazacaksınız.Program.cs: Testleri çalıştıran ve sonuçları görüntüleyen giriş noktanız.
Test sınıfınız şu senaryoları test eden metotlar içermelidir:
TestBookBorrow- Mevcut bir kitabı ödünç almanın başarılı olduğunu ve uygunluğunu değiştirdiğini doğrulayınTestBookBorrowUnavailable- Zaten ödünç alınmış bir kitabı ödünç almanın uygun şekilde başarısız olduğunu doğrulayınTestUserBorrowingLimit- Kullanıcıların 3'ten fazla kitap ödünç alamayacağını doğrulayınTestBookReturn- Ödünç alınan bir kitabı iade etmenin doğru çalıştığını doğrulayınTestSearchByAuthor- Yazara göre arama yapmanın doğru kitapları döndürdüğünü doğrulayın
Her test metodu, testin geçip geçmediğini belirten bir boolean değer döndürmelidir. Tüm testleri yürüten ve sonuçları yazdıran basit bir test çalıştırıcı (test runner) oluşturun.
Aşağıdaki girdileri alacaksınız:
- Çalıştırılacak test senaryosu sayısı (yukarıda listelenen testlere karşılık gelen 1-5 arası)
Çalışan her test için sonucu şu formatta yazdırın:
{TestName}: {PASS|FAIL}Tüm testler tamamlandıktan sonra bir özet yazdırın:
--- Test Summary ---
Passed: {count}
Failed: {count}
Total: {count}Örneğin, girdi şu ise:
3Çıktı şöyle olmalıdır:
TestBookBorrow: PASS
TestBookBorrowUnavailable: PASS
TestUserBorrowingLimit: PASS
--- Test Summary ---
Passed: 3
Failed: 0
Total: 3Tüm 5 testin olduğu başka bir örnek:
5Çıktı şöyle olmalıdır:
TestBookBorrow: PASS
TestBookBorrowUnavailable: PASS
TestUserBorrowingLimit: PASS
TestBookReturn: PASS
TestSearchByAuthor: PASS
--- Test Summary ---
Passed: 5
Failed: 0
Total: 5İzolasyonu sağlamak için testleriniz her test için yeni Book, User ve Library örnekleri oluşturmalıdır. Bu sayede bir testin durumu diğerini etkilemez. Her testi, sisteminizdeki belirli bir davranışın bağımsız bir doğrulaması olarak düşünün!
Kendin dene
using System;
using Library.Tests;
class Program
{
public static void Main(string[] args)
{
// TODO: BorrowingServiceTests örneğini oluştur
// TODO: Her test metodunu çalıştır, her sonuçtan önce test adını yazdır
// Örnek:
// Console.WriteLine("BorrowBook_WhenBookAvailable_ReturnsTrue");
// tests.BorrowBook_WhenBookAvailable_ReturnsTrue();
}
}Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici Dosyalarİsim Alanları ve YönergelerSınıf ve Nesnelere Giriş'this' Anahtar KelimesiMetotlar ve ParametrelerAlanlar ve ÖzelliklerYapıcı MetotlarNesne BaşlatıcılarÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (:) Sözdizimi'base' Anahtar KelimesiVirtual ve Override Anahtar KelimeleriSealed Sınıflar'object' Temel SınıfıÖzet - Çalışan Hiyerarşisi7İleri Düzey Özellikler
Operatör Aşırı Yüklemeİndeksleyiciler (this[])ToString() Geçersiz KılmaGenişletme MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişThread-Safe SingletonFactory KalıbıObserver Kalıbı (Olaylar)Strategy Kalıbı2Özellikler ve Statik Üyeler
Otomatik Uygulanan ÖzelliklerSadece Okunur/Yazılır ÖzelliklerStatik Alanlar ve MetotlarStatik Sınıflarİfade Gövdeli Üyeler5Polimorfizm ve Arayüzler
Derleme vs Çalışma Zamanı PolimorfizmiArayüz vs Soyut SınıfÇoklu ArayüzlerBelirgin ArayüzlerUpcasting ve DowncastingÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kalıtım yerine KompozisyonGenerics (Sınıflar ve Metotlar)Delegates ve EventlerAttributes ve ReflectionIDisposable ve using İfadesiDependency Injection Temelleri11Tasarı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 Mimarisi
Örnek vs Statik Veri'readonly' ve 'const' Anahtar KelimeleriDestekleyici Alanlar (Backing Fields)Özet - Banka Hesabı Yöneticisi6Kapsülleme
Erişim BelirleyicilerKapsülleme için ÖzelliklerVeri Gizleme UygulamasıDeğişmezlik KalıplarıÖzet - Öğrenci Kayıtları9Değişken Argümanlar
'params' Anahtar Kelimesiİsteğe Bağlı Parametrelerİsimlendirilmiş ArgümanlarMetot Aşırı Yükleme12Proje: Kütüphane Sistemi
Proje YapısıKitap ve Kullanıcı Modelleri