Rust:
Testien kirjoittaminen

Miten:

Rustin sisäänrakennettu testikehys tukee yksikkö-, integraatio- ja dokumentaatiotestejä ilman ulkopuolisten kirjastojen tarvetta. Testit merkitään #[test]-annotaatiolla, ja mikä tahansa näin merkitty funktio kääntyy testiksi.

Yksikkötestin kirjoittaminen:

Sijoita yksikkötestit testaamaansa moduuliin käyttäen tests-alimoduulia, joka on merkitty #[cfg(test)]-annotaatiolla varmistaaksesi, että ne kääntyvät vain testattaessa.

// lib.rs tai main.rs
pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

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

    #[test]
    fn it_adds_two() {
        assert_eq!(add(2, 2), 4);
    }
}

Testien suorittaminen:

$ cargo test

Tuloste:

   Kompiloidaan your_package_name v0.1.0 (/polku/sinun_pakettiisi)
    Valmis testi [optimointi + debuginfo] kohteille in 0.00 sek
     Suoritetaan yksikkötestejä src/lib.rs (tai src/main.rs)

suoritetaan 1 testi
test tests::it_adds_two ... ok

testitulos: ok. 1 läpäisi; 0 epäonnistui; 0 ohitettiin; 0 mitattiin; 0 suodatettiin pois

Integraatiotestien kirjoittaminen:

Integraatiotestit sijoitetaan tests-hakemistoon projektisi ylimmälle tasolle, src:n viereen. Jokainen .rs-tiedosto tests-hakemistossa kääntyy omaksi erilliseksi cratesikseen.

// tests/integration_test.rs
use your_package_name;

#[test]
fn it_adds_two() {
    assert_eq!(your_package_name::add(2, 2), 4);
}

Testaaminen suosittujen kolmannen osapuolen kirjastojen kanssa:

Laajempien testausominaisuuksien saavuttamiseksi proptest-kirjasto voi generoida laajan valikoiman syötteitä funktioiden testaamiseen.

Lisää proptest kehitysriippuvuudeksi Cargo.toml-tiedostoon:

[dev-dependencies]
proptest = "1.0"

Käytä proptestia suorittamaan sama testi monilla automaattisesti generoiduilla syötteillä:

// sisällä tests/integration_test.rs tai moduulin #[cfg(test)]
 
use proptest::prelude::*;

proptest! {
    #[test]
    fn doesnt_crash(a: i32, b:i32) {
        your_package_name::add(a, b);
    }
}

Tämä tarkistaa, ettei add panikoi laajalla valikoimalla i32 syötteitä.