CodeBlanks Logo Icon CodeBlanks

Unit test

#[test] ile unit test yazmayı öğrenirsin.

Unit test

Rust'ta test yazmak için ek araç gerekmez. #[test] ile işaretlenen fonksiyonlar cargo test ile çalıştırılır; panic veren test başarısız sayılır. Unit testler, test ettikleri kodla aynı dosyada bir tests modülünde durur:

fn topla(a: i32, b: i32) -> i32 {
    a + b
}

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

    #[test]
    fn iki_sayiyi_toplar() {
        assert_eq!(topla(2, 3), 5);
    }
}

use super::*; sayesinde testler gizli fonksiyonlara da erişebilir.

Test çıktısı

cargo test her testin sonucunu ve özeti yazar:

running 2 tests
test tests::iki_sayiyi_toplar ... ok
test tests::negatifleri_toplar ... FAILED

failures:
---- tests::negatifleri_toplar stdout ----
assertion `left == right` failed
  left: -1
 right: 1

test result: FAILED. 1 passed; 1 failed

Başarılı testlerin println! çıktısı varsayılan olarak gizlenir; görmek için cargo test -- --nocapture. #[ignore] yavaş testleri varsayılan çalıştırmadan çıkarır.

Uygulama İlk test

fn topla(a: i32, b: i32) -> i32 ve onu assert_eq! ile denetleyen bir #[test] içeren #[cfg(test)] mod tests yaz. Alıştırma ortamı main'i çalıştırdığı için main'de topla(2, 3) sonucunu yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
fn topla(a: i32, b: i32) -> i32 {
    a + b
}

fn main() {
    println!("{}", topla(2, 3));
}

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

    #[test]
    fn iki_sayiyi_toplar() {
        assert_eq!(topla(2, 3), 5);
    }
}

Beklenen çıktı

5

Soru ve cevaplar

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

1 <code>cargo test topla</code> ne çalıştırır?

  • Hiçbirini
  • Adında "topla" geçen testleri Doğru cevap
  • topla fonksiyonunu
  • Tüm testleri

Açıklama: Argüman bir süzgeçtir. Tek bir testi tam adla çalıştırmak için cargo test tests::iki_sayiyi_toplar -- --exact kullanılır.

2 Test işareti

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

    #[____]
    fn iki_sayiyi_toplar() {
        assert_eq!(topla(2, 3), 5);
    }
}
Cevap
#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn iki_sayiyi_toplar() {
        assert_eq!(topla(2, 3), 5);
    }
}

Açıklama: #[test] fonksiyonu test koşucusuna kaydeder.

3 Komut ve etkisi

Kavram Anlamı
cargo test Tüm testler
cargo test topla Ada göre süzer
cargo test -- --nocapture Çıktıyı gösterir
#[ignore] Varsayılanda atlar

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