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.

  1. Ajoutez la bibliothèque proptest dans la section [dev-dependencies] de Cargo.toml, ou utilisez cargo add --dev proptest pour le faire.
  2. Ajoutez un sous-module tests à l'intérieur du module account, soit dans le même fichier soit de manière externe. Ce module ne devra être activé qu'en mode test.
  3. Dans ce module, importez super::* pour pouvoir tester le contenu du module account ainsi que proptest::prelude::* pour disposer des fonctionnalités du crate proptest.

Nous souhaitons vérifier qu'une chaîne de caractères contenant au moins un : est bien parsée en un Account.

  1. 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 cet Account ne contient aucun :,
  • en réunissant les champs login et password de cet Account avec un : entre eux on retombe bien sur la chaîne d'origine.
  1. 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.

  1. Ajoutez des alternatives EmptyLogin et EmptyPassword à error::Error.
  2. Renvoyez ces erreurs si le login ou le mot de passe respectivement sont vides.
  3. 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

  1. 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.