Tests Rust pour débutants : guide pratique et premiers pas

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi tester en Rust est passionnant, pas effrayant ?

\n\n

Quand on débute avec Rust, on a l'impression que le compilateur fait déjà tout le travail. Il vérifie la mémoire, gère les emprunts et vous évite de vous tirer une balle dans le pied. Mais même le compilateur le plus strict ne peut pas vérifier la logique de votre programme. C'est là que les tests entrent en jeu.

\n\n

Beaucoup de débutants ont peur des tests. Ils pensent que c'est une perte de temps, qu'il faut écrire du code ennuyeux. En réalité, les tests sont votre filet de sécurité. Ils vous aident à trouver les bugs plus vite, à refactoriser en toute confiance et à dormir tranquille après une mise en production.

\n\n

Dans cet article, nous allons voir par où commencer avec les tests en Rust, même si vous êtes novice. Pas de blabla — que de la pratique, des exemples concrets et des conseils utiles pour vos projets réels.

\n\n

Ce qu'il faut savoir avant de commencer

\n\n

Avant d'écrire des tests, assurez-vous d'avoir installé Rust. Si ce n'est pas le cas, ouvrez un terminal et exécutez :

\n\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
\n\n

Tout ce dont nous avons besoin est déjà intégré dans l'écosystème. Pas besoin d'installer de frameworks supplémentaires. Rust propose un moteur de test intégré et puissant, qui se lance avec une seule commande.

\n\n

Créons un nouveau projet pour nos expériences :

\n\n
cargo new rust_test_guide\ncd rust_test_guide
\n\n

Parfait ! Nous avons maintenant un projet vierge pour apprendre à écrire des tests.

\n\n

Premier test : on découvre avec un exemple

\n\n

Ouvrez le fichier src/lib.rs. Par défaut, il est vide, mais nous allons y ajouter une fonction simple et son test.

\n\n

Écrivons une fonction qui vérifie si un nombre est pair :

\n\n
pub fn is_even(num: i32) -> bool {\n    num % 2 == 0\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn test_is_even() {\n        assert_eq!(is_even(4), true);\n        assert_eq!(is_even(7), false);\n    }\n}
\n\n

Décortiquons le code :

\n\n
    \n
  • #[cfg(test)] — cet attribut indique au compilateur : « Compile ce module uniquement lors de l'exécution des tests ». Il ne sera pas inclus dans la version finale.
  • \n
  • mod tests — nous créons un module pour les tests. C'est une pratique standard.
  • \n
  • use super::*; — nous importons tout ce qui est déclaré au-dessus pour pouvoir utiliser notre fonction is_even.
  • \n
  • #[test] — un marqueur qui transforme une fonction ordinaire en test.
  • \n
  • assert_eq! — une macro qui vérifie l'égalité de deux valeurs. Si elles ne sont pas égales, le test échoue.
  • \n
\n\n

Lancez le test avec la commande :

\n\n
cargo test
\n\n

Si tout est correct, vous verrez un affichage vert :

\n\n
running 1 test\ntest tests::test_is_even ... ok\n\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
\n\n

Félicitations, vous avez écrit votre premier test en Rust ! Voyons maintenant comment écrire des vérifications plus poussées.

\n\n

Les macros essentielles pour les tests

\n\n

Dans vos tests, vous utiliserez constamment trois macros. Retenez-les :

\n\n
    \n
  • assert!(expression) — vérifie que l'expression est vraie. Si elle est fausse, le test échoue.
  • \n
  • assert_eq!(left, right) — vérifie l'égalité de deux valeurs. Pratique pour comparer des résultats.
  • \n
  • assert_ne!(left, right) — vérifie que les valeurs sont différentes.
  • \n
\n\n

Exemple d'utilisation des trois macros :

\n\n
pub fn add_two(x: i32) -> i32 {\n    x + 2\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn test_add_two() {\n        assert!(add_two(3) == 5);\n        assert_eq!(add_two(0), 2);\n        assert_ne!(add_two(10), 13);\n    }\n}
\n\n

Notez que assert! prend une expression booléenne, tandis que

Blogs

Book Recommendations