crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Unit Testing: xUnit ve NUnit ile Kaliteli Kod Yazımı
Unit Test**, uygulamanın mantıksal en küçük birimlerini (genellikle tek bir metodu) izole ederek test etme işlemidir. Bu testler, gelecekte koda yeni özellik eklediğinizde eski yerlerin bozulup bozulmadığını (Regression) anında anlamanızı sağlar.
1. Neden Test Yazmalıyız? (AAA Kuralı)
Bir testi yazarken dünya standartlarında kabul görmüş AAA (Arrange, Act, Assert) kuralını uygularız:
[]Arrange (Hazırlık): Test için gerekli nesneleri ve verileri hazırla.
[]Act (Eylem): Test edilecek metodu çalıştır.- Assert (Doğrulama): Çıkan sonuç beklediğin sonuç mu? Kontrol et.
2. xUnit ile İlk Testinizi Yazın
.NET dünyasında en modern ve popüler test framework'ü xUnit'tir.
C#:
// Test edilecek basit bir sınıf
public class Matematik
{
public int Topla(int a, int b) => a + b;
}
// Test Sınıfı
public class MatematikTestleri
{
[Fact] // Bu bir test metodudur
public void Topla_IkiPozitifSayi_ToplaminiDoner()
{
// Arrange
var matematik = new Matematik();
// Act
var sonuc = matematik.Topla(5, 10);
// Assert
Assert.Equal(15, sonuc);
}
}
3. Mocking (Taklit Etme): Moq Kütüphanesi
Birim testlerinde kural, dış dünyadan (Veritabanı, API, Dosya Sistemi) bağımsız olmaktır. Eğer test ettiğiniz metod bir veritabanına gidiyorsa, orayı "sahte" (Mock) bir nesneyle taklit etmelisiniz.
C#:
// IEmailService'i taklit ediyoruz, gerçekten e-posta gitmiyor!
var mockEmail = new Mock<IEmailService>();
mockEmail.Setup(x => x.Send(It.IsAny<string>())).Returns(true);
var servis = new SiparisServisi(mockEmail.Object);
var sonuc = servis.Onayla(101);
Assert.True(sonuc);
4. Test Framework Karşılaştırması
| Özellik | xUnit | NUnit | MSTest |
|---|---|---|---|
| Popülerlik | Çok Yüksek (Modern) | Yüksek (Klasik) | Orta (Microsoft Standardı) |
| Test Attribute | [Fact], [Theory] | [Test], [TestCase] | [TestMethod] |
| İzole Çalışma | Her test için yeni sınıf örneği | Aynı sınıf örneği kullanılabilir | Aynı sınıf örneği |
5. Test Odaklı Geliştirme (TDD) Nedir?
TDD (Test Driven Development), kodu yazmadan önce testini yazma disiplinidir. Döngü şöyledir:
[]Red (Kırmızı): Önce testi yaz (henüz kod yok, test kalacak).
[]Green (Yeşil): Testi geçecek kadar minimum kodu yaz.- Refactor (Düzenle): Kodu temizle ve iyileştir.
Sonuç
Unit Test yazmak başlangıçta zaman kaybı gibi görünebilir, ancak projeniz büyüdüğünde bir yeri düzeltirken başka bir yeri bozma korkusunu (Fear of Change) tamamen ortadan kaldırır. "Testi geçen kod, güven veren koddur."