T6.3 Tester une fonction⚓︎
Normalement, la première chose qu'on fait après avoir écrit une fonction, c'est la tester. Pour cela, on passe des arguments à la fonction pour lesquels on connaît le résultat attendu.
Par exemple, reprenons la fonction maximum
écrite au chapitre 6.1.5:
1 2 3 4 5 |
|
>>> maximum(2, 5)
5
>>> maximum(10, 3)
10
6.3.1 Assert⚓︎
Ces tests reposent sur le mot-clé assert
, qui va lever une erreur lorsqu'il est suivi d'une expression évaluée à False
:
>>> assert 2 == 3
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
AssertionError
>>> assert 2 <= 3
>>>
Avant d'écrire cette fonction maximum
, on écrirait alors:
1 2 3 |
|
Ce jeu de tests peut se regouper dans une fonction pour vérifier qu'elle a bien le comportement désiré.
1 2 3 4 5 |
|
Un autre exemple
Toujours au chapitre 6.1.5, je vous ai demandé d'écrire une fonction est_bissextile
permettant de déterminer si une année est bissextile ou non (en renvoyant un booléen).
Comme on sait (?) que 2000 était bissextile, que 2020 également, mais ni 1900 ni 2021 ne le sont, on aurait pu commencer par écrire notre fonction de jeu de tests ainsi:
1 2 3 4 5 6 |
|
Jeu de tests couvrant ?
Il faut vérifier que les tests couvrent toutes les situations possibles, mais ce n'est pas toujours facile !
6.3.2 Exercices⚓︎
Exercice 1
Écrire un jeu de tests pour la fonction compte_voyelles
de l'exercice 2 du chapitre 6.1.5.
1 2 3 4 5 |
|
Exercice 2
- Écrire un jeu de tests pour une fonction
fizzbuzz
qui prend un entier en paramètre et renvoie ... vous savez quoi (cf. ex 6 de 6.1.4). - Écrire la fonction
fizzbuzz
et la tester.
- Le jeu de tests doit comporter au moins 4 cas, un pour chaque retour possible de la fonction.
2.
1 2 3 4 5
def test_fizzbuzz(): assert fizzbuzz(3) == 'Fizz' assert fizzbuzz(5) == 'Buzz' assert fizzbuzz(15) == 'FizzBuzz' assert fizzbuzz(2) == 2
1 2 3 4 5 6 7 8 9
def fizzbuzz(nombre): if nombre%3 == 0 and nombre%5 == 0: return 'FizzBuzz' elif nombre%3 == 0: return 'Fizz' elif nombre%5 == 0: return 'Buzz' else: return nombre