Rust:
Rédaction de tests
Comment faire :
Le framework de test intégré à Rust prend en charge les tests unitaires, d’intégration et de documentation sans nécessiter de bibliothèques externes. Les tests sont annotés avec #[test]
, et toute fonction ainsi annotée est compilée comme un test.
Écrire un Test Unitaire :
Placez les tests unitaires dans le module qu’ils testent en utilisant un sous-module tests
marqué avec #[cfg(test)]
pour garantir qu’ils sont uniquement compilés lors du test.
// lib.rs ou 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);
}
}
Exécuter les tests :
$ cargo test
Sortie :
Compilation de your_package_name v0.1.0 (/chemin/vers/votre_paquet)
Fin de la compilation test [non optimisé + debuginfo] cible(s) en 0.00 secs
Exécution des unittests src/lib.rs (ou src/main.rs)
exécution de 1 test
test tests::it_adds_two ... ok
résultat du test : ok. 1 passé ; 0 échoué ; 0 ignoré ; 0 mesuré ; 0 filtré
Écrire des Tests d’Intégration :
Les tests d’intégration se placent dans un répertoire tests au niveau supérieur de votre projet, à côté de src
. Chaque fichier .rs
dans tests
est compilé comme sa propre crate séparée.
// tests/integration_test.rs
use your_package_name;
#[test]
fn it_adds_two() {
assert_eq!(your_package_name::add(2, 2), 4);
}
Tester avec des Bibliothèques Tierces Populaires :
Pour des capacités de test plus étendues, la bibliothèque proptest
peut générer une large gamme d’entrées pour tester les fonctions.
Ajoutez proptest
comme une dépendance de développement dans Cargo.toml
:
[dev-dependencies]
proptest = "1.0"
Utilisez proptest
pour exécuter le même test avec de nombreuses entrées générées automatiquement :
// à l'intérieur de tests/integration_test.rs ou un module's #[cfg(test)]
use proptest::prelude::*;
proptest! {
#[test]
fn doesnt_crash(a: i32, b:i32) {
your_package_name::add(a, b);
}
}
Cela vérifie que add
ne panique pas pour une large gamme d’entrées i32
.