Problème — Module de validation et tests unitaires
Application directe du cours · niveau 2 · NSI (terminale), chapitre 10 — Modularité, mise au point et tests
Énoncé
Problème — Module de validation et tests unitaires.
Concevoir un petit module validation.py regroupant des fonctions de contrôle de saisie : est_email(s) (vérifie la présence d'un seul @ et d'un point après), est_age_valide(n) (entier entre 0 et 120). Documenter chaque fonction et écrire une fonction de tests unitaires regroupant tous les cas.
Corrigé
# fichier validation.py
def est_email(s):
"""Renvoie True si s ressemble a une adresse email simple.
Critere : exactement un '@' et au moins un '.' apres le '@'.
"""
if s.count("@") != 1:
return False
partie_locale, domaine = s.split("@")
return len(partie_locale) > 0 and "." in domaine
def est_age_valide(n):
"""Renvoie True si n est un age plausible (entier de 0 a 120)."""
return isinstance(n, int) and 0 <= n <= 120
def test_validation():
# Tests de est_email
assert est_email("alice@exemple.fr") == True
assert est_email("bob@site.com") == True
assert est_email("pasdarobase.fr") == False # pas de @
assert est_email("a@@b.fr") == False # deux @
assert est_email("a@sansdomaine") == False # pas de point
assert est_email("@exemple.fr") == False # partie locale vide
# Tests de est_age_valide
assert est_age_valide(0) == True # borne basse
assert est_age_valide(120) == True # borne haute
assert est_age_valide(25) == True
assert est_age_valide(-1) == False
assert est_age_valide(121) == False
assert est_age_valide("30") == False # mauvais type
print("test_validation : tous les tests passent.")
test_validation()
Ce module illustre la démarche complète : spécification par docstring, fonctions courtes et indépendantes, et jeu de tests couvrant cas généraux, cas limites et cas d'erreur.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.