Tests de propriétés
On va utiliser le crate proptest
pour tester certaines propriétés de notre account::Account
. La documentation se trouve dans le proptest book.
- Ajoutez la bibliothèque
proptest
dans la section[dev-dependencies]
deCargo.toml
, ou utilisezcargo add --dev proptest
pour le faire. - Ajoutez un sous-module
tests
à l'intérieur du moduleaccount
, soit dans le même fichier soit de manière externe. Ce module ne devra être activé qu'en mode test. - Dans ce module, importez
super::*
pour pouvoir tester le contenu du moduleaccount
ainsi queproptest::prelude::*
pour disposer des fonctionnalités du crateproptest
.
Nous souhaitons vérifier qu'une chaîne de caractères contenant au moins un :
est bien parsée en un Account
.
- Créez un test dans un environment
proptest!
qui vérifie les choses suivantes :
- Pour une chaîne de caractère constituée de caractères arbitraires suivis de
:
suivi de caractères arbitraires, - un
Account
peut être correctement construit, - le champ
login
de cetAccount
ne contient aucun:
, - en réunissant les champs
login
etpassword
de cetAccount
avec un:
entre eux on retombe bien sur la chaîne d'origine.
- Lancez
cargo test
et vérifiez que cela fonctionne correctement.
Rajout de contraintes
On souhaite rajouter comme contrainte dans l'implémentation de TryFrom
pour Account
que ni le login ni le mot de passe ne puissent être vide.
- Ajoutez des alternatives
EmptyLogin
etEmptyPassword
àerror::Error
. - Renvoyez ces erreurs si le login ou le mot de passe respectivement sont vides.
- Relancez les tests, constatez qu'ils ne passent plus et corrigez l'expression à générer.
Pour cette dernière étape, regardez la chaîne de caractère qui vous est présentée après réduction et déduisez en ce qui se passe.
Rajout de tests spécifiques
- Rajoutez des tests classiques pour vérifier que les cas de login vide, mot de passe vide, les deux vides ou l'absence de
:
sont correctement traités.