Adloun

Python fournit un cadre de test dans sa bibliothèque standard

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

Énoncé

Python fournit un cadre de test dans sa bibliothèque standard. Traduire en unittest le jeu de tests de la fonction moyenne vue plus haut, puis dire ce que l'on y gagne et ce que l'on y perd.

Corrigé


import unittest

def moyenne(notes):
    """Moyenne d'une liste non vide. Precondition : len(notes) > 0."""
    assert len(notes) > 0, "moyenne d'une liste vide"
    return sum(notes) / len(notes)

class TestMoyenne(unittest.TestCase):
    def test_nominal(self):
        self.assertEqual(moyenne([10, 12, 14]), 12)

    def test_un_seul(self):
        self.assertEqual(moyenne([7]), 7)

    def test_vide(self):
        with self.assertRaises(AssertionError):
            moyenne([])

unittest.main(verbosity=2, exit=False)

test_nominal (__main__.TestMoyenne.test_nominal) ... ok
test_un_seul (__main__.TestMoyenne.test_un_seul) ... ok
test_vide (__main__.TestMoyenne.test_vide) ... ok

Ran 3 tests in 0.000s

OK

Ce qu'on y gagne.

Ce qu'on y perd. Un vocabulaire à apprendre — class, self, assertEqual — dont rien n'est au programme de première, et qui déplace l'attention du contenu des tests vers leur forme. Un élève qui découvre unittest avant d'avoir écrit vingt assert à la main apprend un outil sans avoir rencontré le problème qu'il résout.

L'ordre à respecter : d'abord les assert nus, ensuite le lanceur de l'exercice précédent — qu'on écrit soi-même et qu'on comprend entièrement —, et unittest en dernier, quand le motif « drapeau, try, verdict » est devenu fastidieux. Un outil ne s'apprend bien qu'après le geste qu'il abrège.

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.