Rust:
Skrive tester

Hvordan:

Rusts innebygde testrammeverk støtter enhets-, integrasjons- og dokumentasjonstester uten behov for eksterne biblioteker. Tester er annotert med #[test], og enhver funksjon annotert slik blir kompilert som en test.

Skrive en EnhetsTest:

Plasser enhetstester i modulen de tester ved å bruke en tests undermodul merket med #[cfg(test)] for å sikre at de bare kompileres når det testes.

// lib.rs eller 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);
    }
}

Kjøre tester:

$ cargo test

Utdata:

   Compiling your_package_name v0.1.0 (/path/to/your_package)
    Finished test [unoptimized + debuginfo] target(s) in 0.00 secs
     Running unittests src/lib.rs (or src/main.rs)

running 1 test
test tests::it_adds_two ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

Skrive Integrasjonstester:

Integrasjonstester plasseres i en tests mappe på toppnivået av prosjektet ditt, ved siden av src. Hver .rs-fil i tests kompileres som sin egen separate crate.

// tests/integration_test.rs
use your_package_name;

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

Testing med Populære Tredjepartsbiblioteker:

For mer omfattende testingsegenskaper, kan biblioteket proptest generere et bredt spekter av inndata for å teste funksjoner.

Legg til proptest som en dev avhengighet i Cargo.toml:

[dev-dependencies]
proptest = "1.0"

Bruk proptest for å kjøre samme test med mange automatisk genererte inndata:

// inne i tests/integration_test.rs eller en moduls #[cfg(test)]

use proptest::prelude::*;

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

Dette sjekker at add ikke panikker for et bredt spekter av i32 inndata.