</>
Plan du cours — 33/66

Tests unitaires

Intermédiaire

Placé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() { /* ... */ }
}