Tests unitaires et assertions en python
Testez une fonction grâce aux assertions.
Nous avons évoqué dans un récent article les exceptions en python. A ce sujet, nous avons vu que l’instruction assert pouvait être utilisée dans un bloc try / AssertionError afin de tester les paramètres d'entrée d’une fonction, par exemple.
Dans cet article nous allons voir une autre utilisation possible de l’instruction assert. Il s’agit ici de tester une fonction.
Mais avant d’aller plus en avant, rappelons rapidement ce que nous entendons par
tests unitaires. Comme vous le savez, un programme peut vite devenir complexe et
imposant. Fort heureusement, nous avons à notre disposition une arme redoutable
qui consiste à décomposer la tâche complexe qu’est le programme en bloc de code
spécialisé dans une tâche précise et si possible réutilisable : la fonction.
Le test unitaire, dans le contexte que nous décrivons ici, va consister à vérifier
que la fonction retourne bien les valeurs attendues selon les paramètres que nous
lui aurons passés en entrée. L’objectif n’est donc pas de passer a une fonction
les valeurs de paramètres qu’elle est supposée rencontrer mais bien toutes les
valeurs possibles.
Pour y parvenir, nous allons tout simplement stipuler, dans le corps même de notre programme, des assertions, comme ceci :
def liste_impairs(n : int = 0) -> List[int]:
#initialisation de la liste de sortie
liste_sortie = []
#Les premier nombres impairs sont ajoutés à la liste
try:
for i in range(1, 2*n, 2):
liste_sortie.append(i)
return liste_sortie
except TypeError as e:
return []
Voici tout d’abord une fonction très simple qui va nous retourner les
assert liste_impairs(0) == []
assert liste_impairs(2) == [1, 3]
assert liste_impairs() == []
assert liste_impairs(-9) == []
assert liste_impairs('a') == []
assert liste_impairs(3.5) == []
Comme vous le voyez, le principe consiste à spécifier l’appel de la fonction et le résultat attendu. Si l’assertion s'avère fausse, une exception AssertionError sera levée et nous aurons ainsi pu identifier un bug de notre programme, qui, certes ne serait peut-être jamais apparu, mais pourtant bien présent, que ce soit au niveau de la conception ou de la réalisation.
Retrouvez dans la rubrique "Nos datasets" toutes les données dont vous aurez besoin pour tester et pratiquer !