Özet - Test
- Rust kursu
- Orta seviye
- Ders 88/115
- 5 dk
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
fn main() {
// buraya yaz
}Örnek çözüm
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ü
#[test]
fn yas_okunur() -> ____ {
let y = yas("30")?;
assert_eq!(y, 30);
Ok(())
}
#[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 |