Testing: Rust'ta Unit ve Entegrasyon Testleri Yazımı

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
Rust, test yazmayı dilin en temel özelliklerinden biri olarak kabul eder. Diğer dillerin aksine, Rust'ta test yazmak için harici bir kütüphaneye ihtiyacınız yoktur; her şey cargo test komutuyla kutudan hazır çıkar.
Rust testleri iki ana kategoriye ayrılır: Unit Tests (Birim Testleri) ve Integration Tests (Entegrasyon Testleri).

1. Unit Tests (Birim Testleri)​

Birim testleri, kodun küçük ve izole parçalarını (genellikle tek bir fonksiyonu) test etmek için kullanılır. Rust geleneğinde bu testler, test edilen kodla aynı dosya içinde bulunur.
  • Nerede Yazılır? Dosyanın en altında, #[cfg(test)] ile işaretlenmiş bir modülün içinde.
  • Gizlilik: Birim testleri, private fonksiyonlara erişebilir.
Rust
Kod:
fn topla(a: i32, b: i32) -> i32 {
    a + b
}

#[cfg(test)] // Sadece 'cargo test' çalıştırıldığında derlenir
mod tests {
    use super::*; // Üst kapsamdaki fonksiyonlara erişim sağlar

    #[test] // Bu fonksiyonun bir test olduğunu belirtir
    fn test_topla() {
        assert_eq!(topla(2, 2), 4);
    }
}

2. Assertion Makroları​

Testlerin sonucunu doğrulamak için üç ana makro kullanılır:
  • assert!(koşul): Koşulun true olup olmadığını kontrol eder.
  • assert_eq!(a, b): İki değerin birbirine eşit olup olmadığını kontrol eder.
  • assert_ne!(a, b): İki değerin birbirinden farklı olup olmadığını kontrol eder.
Ayrıca, bir kodun hata vermesini (panik yapmasını) bekliyorsanız #[should_panic] özniteliğini kullanabilirsiniz.

3. Integration Tests (Entegrasyon Testleri)​

Entegrasyon testleri, kütüphanenizin dışarıdan bir kullanıcı tarafından nasıl kullanılacağını test eder. Sadece pub (public) olan fonksiyonlara erişebilirler.
  • Nerede Yazılır? Projenizin kök dizinindeki tests/ klasöründe.
  • Yapı: Her .rs dosyası bu klasörde ayrı bir "crate" (paket) olarak derlenir.
Rust
Kod:
// tests/entegrasyon_testi.rs
use benim_paketim; // Test edilecek kütüphaneyi içeri aktar

#[test]
fn disaridan_kullanim_testi() {
    assert_eq!(benim_paketim::api_fonksiyonu(), 100);
}

4. Testleri Çalıştırma Seçenekleri​

cargo test komutu çok esnektir:
  • cargo test: Tüm testleri çalıştırır.
  • cargo test test_adi: Sadece ismi eşleşen testi çalıştırır.
  • cargo test -- --nocapture: Test başarılı olsa bile println! çıktılarını ekranda gösterir.
  • cargo test -- --ignored: #[ignore] ile işaretlenmiş (genellikle uzun süren) testleri çalıştırır.

Özet Karşılaştırma​

ÖzellikUnit TestIntegration Test
KonumKaynak dosyanın içi (src/)tests/ klasörü
Özel Erişimiprivate öğelere erişebilirSadece pub öğelere erişebilir
AmaçFonksiyonel mantık kontrolüModüller arası uyum ve API testi
KapsamKüçük ve hızlıGeniş ve kapsamlı
E-Tablolar'a aktar

Belge Testleri (Doc Tests)​

Rust'ın en şık özelliklerinden biri, dökümantasyona yazdığınız örnek kodların da test edilmesidir. Kodunuzun kullanım kılavuzundaki örnekler eskirse, cargo test hata vererek sizi uyarır!
Rust
Kod:
/// İki sayıyı toplar.
/// 
/// ```
/// let sonuc = benim_paketim::topla(5, 5);
/// assert_eq!(sonuc, 10);
/// ```
pub fn topla(a: i32, b: i32) -> i32 { a + b }
 
Geri
Üst