CodeBlanks Logo Icon CodeBlanks

should_panic

should_panic ile panic bekleyen testler yazarsın.

should_panic

Bazı fonksiyonların geçersiz girdide panic vermesi beklenen davranıştır. #[should_panic], test panic verirse başarılı sayar. expected ile panic mesajında belirli bir metnin geçmesi de istenir:

fn bol(a: i32, b: i32) -> i32 {
    if b == 0 {
        panic!("sıfıra bölme");
    }
    a / b
}

#[test]
#[should_panic(expected = "sıfıra bölme")]
fn sifira_bolme_panik_verir() {
    bol(1, 0);
}

expected olmadan, yanlış bir nedenle oluşan panic de testi geçirirdi.

Result döndüren testler

Panic yerine Result döndüren fonksiyonlarda, hata durumunu doğrudan denetlemek daha açıktır:

fn guvenli_bol(a: i32, b: i32) -> Result<i32, String> {
    if b == 0 { return Err("sıfıra bölme".into()); }
    Ok(a / b)
}

#[test]
fn sifir_hata_doner() {
    assert_eq!(guvenli_bol(1, 0), Err("sıfıra bölme".to_string()));
    assert!(guvenli_bol(4, 2).is_ok());
}

Uygulama Panic testi

Yukarıdaki bol fonksiyonunu ve #[should_panic(expected = "sıfıra bölme")] işaretli bir testi içeren #[cfg(test)] mod tests yaz. main'de bol(10, 2) sonucunu yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
fn bol(a: i32, b: i32) -> i32 {
    if b == 0 {
        panic!("sıfıra bölme");
    }
    a / b
}

fn main() {
    println!("{}", bol(10, 2));
}

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

    #[test]
    #[should_panic(expected = "sıfıra bölme")]
    fn sifira_bolme_panik_verir() {
        bol(1, 0);
    }
}

Beklenen çıktı

5

Soru ve cevaplar

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

1 <code>#[should_panic]</code> testi panic vermeden biterse ne olur?

  • Uyarı verir
  • Test başarısız olur Doğru cevap
  • Test başarılı olur
  • Atlanır

Açıklama: Beklenen panic gerçekleşmediyse fonksiyon hatalı girdiyi yakalamıyor demektir.

2 Beklenen panic

Soru
#[test]
#[____(expected = "sıfıra bölme")]
fn sifira_bolme_panik_verir() {
    bol(1, 0);
}
Cevap
#[test]
#[should_panic(expected = "sıfıra bölme")]
fn sifira_bolme_panik_verir() {
    bol(1, 0);
}

Açıklama: should_panic, panic veren testi başarılı sayar.

3 Durum ve test sonucu

Kavram Anlamı
should_panic + panic Başarılı
should_panic + panic yok Başarısız (panic yok)
expected uyuşmuyor Başarısız
Normal test + panic Başarısız (panic)

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