Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Écrire un test pour une fonction

Après cette leçon: Je peux écrire un test qui vérifie une fonction.

Leçon de 50 minAucune commande

Une erreur qui coûte cher

Un vendredi soir, une boutique en ligne change le calcul de la TVA. Personne ne vérifie.

Tout le week-end, les clients paient le prix hors taxe. L'entreprise perd 3 000 €.

Un test de quatre lignes aurait trouvé l'erreur avant la mise en ligne.

À la fin de cette leçon

Remarque

Je peux écrire un test qui vérifie une fonction.

Mots clés

MotCe que ça veut direExemple
Testdu code qui vérifie un autre code
assertune ligne qui arrête tout si la condition est fausseassert obtenu == attendu
Valeur attenduele résultat que vous calculez à la main
Valeur obtenuele résultat que la fonction renvoie
Cas limiteune valeur pile à la frontière d'une règle5000
pytestun outil Python qui lance tous les tests

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un test compare attendu et obtenu

Un test pose une question simple : la fonction donne-t-elle le bon résultat ?

Vous calculez d'abord la valeur attendue à la main. 10 € hors taxe font 12 € TTC.

Puis vous appelez la fonction pour avoir la valeur obtenue. assert obtenu == attendu ne dit rien si les deux sont égales. Sinon, le programme s'arrête avec une AssertionError.

Essayez : un premier test

Code: python
def prix_ttc(prix_ht):
    # TVA à 20 %, prix en centimes
    return prix_ht + prix_ht * 20 // 100

attendu = 1200
obtenu = prix_ttc(1000)
assert obtenu == attendu, "le prix TTC est faux"
print("Test réussi : 1000 HT donne", obtenu, "TTC")

# À vous : ajoutez un assert pour un prix HT de 2500 centimes.
# Calculez d'abord à la main le prix TTC que vous attendez.

Un test vérifie une seule idée

En entreprise, chaque test est une fonction dont le nom commence par test_. L'outil pytest les trouve et les lance tous.

Un test vérifie une seule idée. Son nom dit laquelle, comme test_prix_nul.

Quand un test échoue, son nom vous dit tout de suite ce qui ne va plus.

Exemple : trois tests pour prix_ttc

Nom du testPrix HTAttendu TTCPourquoi ce cas
test_prix_courant10001200Un prix normal
test_prix_nul00Un article offert
test_petit_prix56Un arrondi sur un petit prix

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Essayez : des tests nommés

Code: python
def prix_ttc(prix_ht):
    return prix_ht + prix_ht * 20 // 100


# Un test par idée, avec un nom qui dit ce qu'il vérifie.
def test_prix_courant():
    assert prix_ttc(1000) == 1200


def test_prix_nul():
    assert prix_ttc(0) == 0


def test_petit_prix():
    assert prix_ttc(5) == 6


# pytest lance ces fonctions tout seul. Ici, on les appelle à la main.
test_prix_courant()
test_prix_nul()
test_petit_prix()
print("Les trois tests passent.")

Les bugs se cachent aux frontières

Une règle a souvent une frontière : « livraison offerte dès 50 € ». Les erreurs se cachent pile sur cette frontière, à 50 € tout rond.

Testez donc trois valeurs : une en dessous, une au-dessus, et une pile sur la limite. Pensez aussi à zéro et aux listes vides.

Une erreur fréquente

Attention

Beaucoup pensent qu'un test qui passe prouve que le code est juste. C'est faux. Un test ne vérifie que les cas que vous avez écrits. Ajoutez les cas limites, sinon le bug passe à côté.

À vous : le bug à 50 €

Code: python
def frais_de_port(total):
    # Livraison offerte dès 50 €, sinon 4,90 € (en centimes)
    if total > 5000:
        return 0
    return 490


def test_petite_commande():
    assert frais_de_port(2000) == 490


def test_grosse_commande():
    assert frais_de_port(8000) == 0


def test_pile_cinquante_euros():
    assert frais_de_port(5000) == 0


test_petite_commande()
test_grosse_commande()
test_pile_cinquante_euros()
print("Tout passe.")

# Exécutez : un test échoue. Corrigez la fonction, pas le test.

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.