Tests automatiques
Orestis Malaspinas
cargo new projet_test --lib
projet_test/src/lib.rs
#[cfg(test)] // cette partie sera exécuté que lors du test
mod tests {
#[test] // la fonction suivant cette annotation sera exécutée comme test
fn it_works() {
assert_eq!(2 + 2, 4); // Vérification que l'addition fonctionne pour 2+2
assert_ne!(2 + 2, 6); // utilisation de assert_ne!
assert!(2 + 2 == 4); // utilisation de assert! 2+2
}
}
cargo test
Compiling projet_test v0.1.0 (projet_test)
Finished dev [unoptimized + debuginfo] target(s) in 0.45s
Running projet_test/target/debug/deps/projet_test-05539f5503f2a0fe\
\
running 1 test
test tests::it_works ... ok\
\
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out\
\
Doc-tests projet_test\
\
running 0 tests\
\
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
fn add_two(a: i32) -> i32 {
a + 2
}
#[cfg(test)]
mod tests {
use super::*; // mise en portée de tout ce qui est dans le module de dessus
#[test]
fn test_add_two() {
assert_eq!(add_two(2), 4); // Vérification de la fonction add_two
}
#[test]
fn test_add_two_custom_msg() {
// Ce test va paniquer à dessein, pour voir le message personnalisé.
assert_eq!(add_two(2) == 5, "Attention la somme 2+2 ne donne pas 5 mais {}.", 4);
}
}
fn two_div_by(a: i32) -> i32 {
if a == 0 {
panic!("On nee peut pas diviser par zéro.");
} else {
return 2 / a;
}
}
#[cfg(test)]
mod tests {
use super::*; // mise en portée de tout ce qui est dans le module de dessus
#[test]
#[should_panic] // ce test doit paniquer, s'il panique pas il est raté
fn two_div_fail() {
two_div_by(0);
}
}
cargo test --test-threads=1
.cargo test -- --nocapture --test-threads=1
Comment écrire un test
En général un test effectue les trois actions suivantes: