Birim testi, kodunuzun küçük parçalarının beklendiği gibi çalıştığını otomatik olarak doğrulayan testlerdir. Asıl değeri, bugün yazdığınız kodu değil, altı ay sonra yapacağınız değişikliği korumasıdır.
Neden test yazmalı?
- Bir değişikliğin başka bir yeri bozup bozmadığını saniyeler içinde gösterir.
- Kodun nasıl kullanılacağını belgeleyen canlı örnekler sunar.
- Hataları müşteri fark etmeden yakalar.
- Kodu yeniden düzenlemeyi (refactoring) korkutucu olmaktan çıkarır.
xUnit ile ilk test
public class IndirimHesaplayiciTests
{
[Fact]
public void Bin_TL_uzeri_siparise_yuzde_on_indirim_uygulanir()
{
// Arrange
var hesap = new IndirimHesaplayici();
// Act
var sonuc = hesap.Hesapla(1500m);
// Assert
Assert.Equal(1350m, sonuc);
}
[Theory]
[InlineData(0, 0)]
[InlineData(999, 999)]
public void Esik_altinda_indirim_uygulanmaz(decimal tutar, decimal beklenen)
=> Assert.Equal(beklenen, new IndirimHesaplayici().Hesapla(tutar));
}
Arrange-Act-Assert
Her test üç bölümden oluşur: hazırlık, eylem ve doğrulama. Bu düzen testleri okunaklı tutar.
Sahte nesneler (mock)
Veritabanı, e-posta veya dış API gibi bağımlılıklar testte gerçek haliyle kullanılmaz. Arayüzler ve dependency injection sayesinde bunların yerine sahte uygulamalar verilir.
Test edilebilir kod
- İş kuralları arayüzden (form, controller) ayrı sınıflarda olmalı.
DateTime.Nowgibi değişken değerler doğrudan kullanılmak yerine soyutlanmalı (.NET'teTimeProviderbu iş için vardır).- Statik ve gizli bağımlılıklardan kaçınılmalı.
Neyi test etmeli?
- Para, stok ve fiyat hesapları gibi kritik iş kuralları.
- Sınır durumları: sıfır, negatif, boş liste, çok büyük değer.
- Daha önce hata çıkan yerler: her hata düzeltmesi bir testle korunmalı.
Her satırı test etmek gerekmez; risk ve değer odaklı olun.
Otomatik çalıştırma
Testler her kod gönderiminde otomatik çalışmalıdır. Bkz. GitHub Actions ile CI/CD.
Entegrasyon testleri
Birim testlerine ek olarak, gerçek veritabanı veya API ile birlikte çalışan entegrasyon testleri de yazılabilir. ASP.NET Core, uygulamayı bellekte ayağa kaldırarak test etmeye imkân tanır.
Sık sorulan sorular
xUnit mi, NUnit mi, MSTest mi?
Üçü de olgun ve yaygın. Takımın alışkın olduğu çerçeveyi seçmek en pratik yoldur.
Eski bir projeye test eklenebilir mi?
Evet. En kritik iş kurallarından ve yeni değişikliklerden başlayarak kademeli eklemek en verimli yöntemdir.
Sonuç
Testler, yazılımın güvenle büyümesini sağlayan emniyet ağıdır. Projelerinizde test altyapısı kurmak için iletişime geçebilirsiniz.