should_panic
- Rust kursu
- Orta seviye
- Ders 87/115
- 4 dk
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
fn main() {
// buraya yaz
}Örnek çözüm
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
#[test]
#[____(expected = "sıfıra bölme")]
fn sifira_bolme_panik_verir() {
bol(1, 0);
}
#[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) |