Exercices Architecture & Patterns Tester un validateur (approche TDD)
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

Tester un validateur (approche TDD)

Dans beaucoup d'equipes pro, on ecrit les tests AVANT le code. Ca s'appelle le TDD (Test-Driven Development) et ca change completement ta facon de reflechir. Au lieu de coder puis de verifier, tu definis d'abord ce que le code DOIT faire, puis tu ecris le minimum pour que ca marche. L'idee :

1. Tu ecris un test qui echoue (parce que le code n'existe pas encore)
2. Tu ecris le minimum de code pour que le test passe
3. Tu ameliores le code sans casser les tests

Ici, on va simuler cette approche. Tu vas écrire les tests d'un validateur de mot de passe PUIS le validateur lui-meme. Les deux dans la meme réponse, mais tu dois d'abord penser aux tests.

Le validateur valider_mot_de_passe(mdp) doit vérifier qu'un mot de passe respecte ces regles :
- Au moins 8 caracteres
- Contient au moins une majuscule
- Contient au moins une minuscule
- Contient au moins un chiffre

Si le mot de passe est valide, il renvoie {"valide": True}.
Si le mot de passe est invalide, il renvoie {"valide": False, "erreurs": [...]} avec la liste des regles non respectees sous forme de chaines descriptives.

Écris les deux fonctions :

valider_mot_de_passe(mdp) : le validateur decrit ci-dessus.

tester_validateur() : une fonction qui teste le validateur avec au moins 6 cas differents, dont les cas limites. Elle renvoie "OK" si tous les tests passent.

Exemple :

valider_mot_de_passe("Abcdef1234") renvoie {"valide": True}
valider_mot_de_passe("abc") renvoie {"valide": False, "erreurs": ["Au moins 8 caracteres", "Au moins une majuscule", "Au moins un chiffre"]}
tester_validateur() renvoie "OK"

Tests (5/6)

Le validateur accepte un bon mot de passe
r = valider_mot_de_passe('MonPass1234')
assert r['valide'] is True, 'MonPass1234 devrait etre valide'
Le validateur refuse un mot de passe trop court
r = valider_mot_de_passe('Ab1')
assert r['valide'] is False
assert any('8' in e for e in r['erreurs']), 'Le message doit mentionner les 8 caracteres'
Le validateur detecte toutes les erreurs
r = valider_mot_de_passe('')
assert r['valide'] is False
assert len(r['erreurs']) >= 3, 'Une chaine vide devrait avoir au moins 3 erreurs'
Les tests passent
assert tester_validateur() == 'OK', 'tester_validateur() devrait renvoyer OK'
Les tests vérifient au moins 6 cas
import inspect
src = inspect.getsource(tester_validateur)
assert src.count('assert') >= 6, f'tester_validateur doit avoir au moins 6 assert, il en a {src.count("assert")}'

+ 0 tests cachés

Indices (3 disponibles)

solution.py