Fonction en python (3/3)

DéfinitionTest unitaire

Un test unitaire est un code informatique pour vérifier le résultat d'un code.

ExempleUtilisation d'un test unitaire pour les fonctions

Pour chaque écriture de fonction, il faut écrire un test unitaire. Ce test permet de vérifier le bon comportement du code en comparant le résultat de la fonction avec un résultat connu

1
def ma_fonction(ma_liste):
2
    """
3
    La fonction reçoit en argument une liste et retourne la somme des deux premiers
4
    éléments de la liste.
5
    ma_liste - liste comprenant au moins deux éléments
6
    """
7
    if len(ma_liste) >= 2:
8
        return ma_liste[0] + ma_liste[1]
9
    else:
10
        raise ValueError("Je vous avais prévenu! RTFM")

L'appel de cette fonction pourra être :

1
print(ma_fonction([1,2]))

La fonction est appelée avec la valeur [1, 2] et le résultat est 3. Ce résultat est bon et peut constituer une référence.

On peut aussi appeler la fonction avec [17, -12] le résultat sera alors 5.

A partir de ces deux résultats on intègre dans la documentation de la fonction les tests unitaires :

1
import doctest
2
3
def ma_fonction(ma_liste):
4
    """
5
    La fonction reçoit en argument une liste et retourne la somme des deux premiers
6
    éléments de la liste.
7
    ma_liste - liste comprenant au moins deux éléments
8
    >>> ma_fonction([1, 2])
9
    3
10
    >>> ma_fonction([17, -12])
11
    5
12
    """
13
    if len(ma_liste) >= 2:
14
        return ma_liste[0] + ma_liste[1]
15
    else:
16
        raise ValueError("Je vous avais prévenu! RTFM")
17

Si maintenant vous entrez la commande : doctest.testmod() vous obtenez

On peut aussi vérifier que la fonction lance bien une exception :

1
import doctest
2
3
def ma_fonction(ma_liste):
4
    """
5
    La fonction reçoit en argument une liste et retourne la somme des deux premiers
6
    éléments de la liste.
7
    ma_liste - liste comprenant au moins deux éléments
8
    >>> ma_fonction([1, 2])
9
    3
10
    >>> ma_fonction([17, -12])
11
    5
12
    >>> ma_fonction([1])
13
    Traceback (most recent call last):
14
    ...
15
    ValueError: length list must be greater than 2
16
    """
17
    if len(ma_liste) >= 2:
18
        return ma_liste[0] + ma_liste[1]
19
    else:
20
        raise ValueError("Je vous avais prévenu!")
21

Si maintenant vous entrez la commande : doctest.testmod() vous obtenez

Si maintenant, le code est modifié, len(ma_liste) >= 2 est changé en len(ma_liste) >= 3 doctest.testmod() est très bavard

résultat de test.testmod()