Tests unitaires
IntermédiairePlacés dans le même fichier que le code, dans un module tests compilé uniquement pour cargo test.
pub fn additionner(a: i32, b: i32) -> i32 { a + b }
pub fn diviser(a: i32, b: i32) -> Result<i32, String> {
if b == 0 { Err("division par zéro".into()) } else { Ok(a / b) }
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn additionne_deux_nombres() {
assert_eq!(additionner(2, 3), 5);
}
#[test]
fn division_par_zero_renvoie_une_erreur() {
assert!(diviser(1, 0).is_err());
}
#[test]
#[should_panic(expected = "index")]
fn panique_hors_limites() {
let v = vec![1];
let _ = v[5];
}
// Un test peut renvoyer un Result : on peut utiliser ?
#[test]
fn test_avec_result() -> Result<(), String> {
let r = diviser(10, 2)?;
assert_eq!(r, 5);
Ok(())
}
#[test]
#[ignore = "lent, à lancer explicitement"]
fn test_long() { /* ... */ }
}