CodeBlanks Logo Icon CodeBlanks

Özet - Test

Unit, integration ve doc test'i birleştirerek bir math crate'i test edersin.

Test özeti

Unit testler src/ içinde #[cfg(test)] mod tests modülünde, gizli öğelere de erişerek yazılır. Integration testleri tests/ klasöründe yalnızca genel API'yi kullanır. Doc testler /// yorumlarındaki örnekleri çalıştırır. Denetim: assert!, assert_eq!, assert_ne!; beklenen panic için #[should_panic(expected = "..")]. Testler Result<(), E> da döndürebilir; böylece ? kullanılabilir.

? ile test

Kurulum adımları başarısız olabilecek testlerde ?, unwrap zincirlerinden daha temizdir:

fn yas(s: &str) -> Result<u8, String> {
    s.trim().parse().map_err(|e| format!("geçersiz yaş: {e}"))
}

#[test]
fn yas_okunur() -> Result<(), String> {
    let y = yas(" 30 ")?;
    assert_eq!(y, 30);
    Ok(())
}

Uygulama Result döndüren test

Yukarıdaki yas fonksiyonunu ve Result<(), String> döndüren yas_okunur testini yaz. main'de yas(" 30 ") sonucunu {:?} ile yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
fn yas(s: &str) -> Result<u8, String> {
    s.trim().parse().map_err(|e| format!("geçersiz yaş: {e}"))
}

fn main() {
    println!("{:?}", yas(" 30 "));
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn yas_okunur() -> Result<(), String> {
        let y = yas(" 30 ")?;
        assert_eq!(y, 30);
        Ok(())
    }
}

Beklenen çıktı

Ok(30)

Soru ve cevaplar

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

1 <code>Result</code> döndüren bir test <code>Err</code> döndürürse ne olur?

  • Test başarısız sayılır ve hata yazdırılır Doğru cevap
  • Test başarılı sayılır
  • Derlenmez
  • Atlanır

Açıklama: Result döndüren testlerde #[should_panic] kullanılamaz; hata beklentisi assert!(r.is_err()) ile yazılır.

2 Test dönüş türü

Soru
#[test]
fn yas_okunur() -> ____ {
    let y = yas("30")?;
    assert_eq!(y, 30);
    Ok(())
}
Cevap
#[test]
fn yas_okunur() -> Result<(), String> {
    let y = yas("30")?;
    assert_eq!(y, 30);
    Ok(())
}

Açıklama: Result döndüren testlerde ? kullanılabilir.

3 Grubun özeti

Kavram Anlamı
#[test] Test fonksiyonu
tests/ klasörü Integration test
/// ``` Doc test
#[should_panic] Beklenen panic

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