Adloun

Rejouer tous les tests à la main, à chaque séance, finit par être…

Exercice supplémentaire · niveau 3 (difficile) · NSI (première), chapitre 11 — Conduire un projet · Versionner, outiller

Énoncé

Rejouer tous les tests à la main, à chaque séance, finit par être négligé. Écrire une fonction lancer(portee) qui exécute automatiquement toutes les fonctions dont le nom commence par test_, affiche le verdict de chacune et le nombre d'échecs.

Corrigé


def lancer(portee):
    """Execute toutes les fonctions dont le nom commence par test_.
    portee : le dictionnaire des noms, obtenu par globals().
    Renvoie le nombre d'echecs."""
    noms = sorted(n for n in portee if n.startswith("test_"))
    echecs = 0
    for nom in noms:
        try:
            portee[nom]()
            print("  ok    ", nom)
        except AssertionError as e:
            echecs = echecs + 1
            print("  ECHEC ", nom, ":", e)
    print("%d test(s), %d echec(s)" % (len(noms), echecs))
    return echecs

def test_addition():
    assert 2 + 2 == 4

def test_qui_echoue():
    assert 1 == 2, "un plus un ne fait pas deux"

lancer(dict(globals()))

  ok     test_addition
  ECHEC  test_qui_echoue : un plus un ne fait pas deux
2 test(s), 1 echec(s)

Trois points où l'on se trompe en écrivant cette fonction.

Ce que cette fonction change concrètement : rejouer tous les tests devient une seule commande de trois secondes. La première habitude du cours — « rejouer tous les tests à chaque séance » — cesse de dépendre de la discipline du groupe, et c'est la seule façon fiable de la tenir.

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.