Adloun

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.