CodeBlanks Logo Icon CodeBlanks

Integration test

tests/ klasörüyle integration test yazar.

Integration test

Integration testleri, kütüphaneyi bir kullanıcı gibi, yalnızca genel (pub) API üzerinden dener. Proje kökündeki tests/ klasöründe dururlar ve her dosya ayrı bir crate olarak derlenir:

istatistik/
├── Cargo.toml
├── src/lib.rs           // pub fn ortalama(..)
└── tests/
    └── hesaplar.rs

// tests/hesaplar.rs
use istatistik::ortalama;

#[test]
fn ortalama_dogru() {
    assert_eq!(ortalama(&[2.0, 4.0]), 3.0);
}

#[cfg(test)] gerekmez; tests/ klasörü zaten yalnızca cargo test'te derlenir.

Ortak test yardımcıları

Birden çok test dosyasının kullandığı kurulum kodu tests/ortak/mod.rs içine konur; tests/ortak.rs yazılırsa kendisi de bir test dosyası sayılırdı:

// tests/ortak/mod.rs
pub fn ornek_veri() -> Vec<f64> { vec![2.0, 4.0, 9.0] }

// tests/hesaplar.rs
mod ortak;

#[test]
fn uc_degerin_ortalamasi() {
    let v = ortak::ornek_veri();
    assert_eq!(istatistik::ortalama(&v), 5.0);
}

Uygulama Dışarıdan dene

Kütüphaneyi mod istatistik ile taklit et ve içine pub fn ortalama(v: &[f64]) -> f64 yaz. main'de yalnızca genel API ile assert_eq!(istatistik::ortalama(&[2.0, 4.0]), 3.0) denetimini yap ve ortalama: 3 yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
mod istatistik {
    pub fn ortalama(v: &[f64]) -> f64 {
        v.iter().sum::<f64>() / v.len() as f64
    }
}

fn main() {
    let o = istatistik::ortalama(&[2.0, 4.0]);
    assert_eq!(o, 3.0);
    println!("ortalama: {}", o);
}

Beklenen çıktı

ortalama: 3

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Yalnızca <code>src/main.rs</code> olan (kütüphanesiz) bir paket için integration test yazılabilir mi?

  • Evet, use main;
  • Evet, otomatik
  • Yalnızca unit testler gerekir
  • Doğrudan hayır; binary crate'ler içe aktarılamaz, mantığı lib.rs'e taşımak gerekir Doğru cevap

Açıklama: Bu, ince bir main.rs ile mantığı lib.rs'te tutma alışkanlığının bir başka nedenidir.

2 Genel API'yi al

Soru
// tests/hesaplar.rs
____ istatistik::ortalama;
Cevap
// tests/hesaplar.rs
use istatistik::ortalama;

Açıklama: Integration testleri kütüphaneyi dışarıdan, crate adıyla use eder.

3 Test türü ve yeri

Kavram Anlamı
Unit test src/ içinde mod tests
Integration test tests/*.rs
Ortak yardımcı tests/ortak/mod.rs
Doc test /// yorumlarında

Orta seviye bölümündeki tüm dersler