Note
Aucun test n’est parfait, mais cela permet quand même d’écarter de nombreuses erreurs.
Un test ressemble à une expérience scientifique.
Il examine une hypothèse exprimée en fonction de trois éléments :
Cet examen est effectué sous conditions contrôlées pour pouvoir tirer des conclusions et, dans l’idéal, être reproduit.
Préférez faire peu de tests, mais des tests utiles !
Il existe de très nombreux tests différents, voici les principaux :
Nous allons utiliser le package pytest
pour réaliser nos tests en Python.
operations_mathematiques.py
class OperationsMathematiques:
"""Opérations Mathématiques"""
def diviser_cinq_par(self, nombre) -> float:
"""Divise le nombre 5 par un nombre donné.
Parameters
----------
nombre : float or int
Le nombre par lequel 5 sera divisé.
Returns
-------
float or None
Le résultat de la division de 5 par le nombre donné.
Si le nombre est égal à 0, la méthode retourne None.
"""
if nombre != 0:
return 5 / nombre
else:
return None
Créons une classe de test.
Pour tester le cas nominal, nous :
diviser_cinq_par()
test_operations_mathematiques.py
Mais ce n’est pas suffisant !
None
Nous appelons la méthode avec ce paramètre : diviser_cinq_par("a")
?
Vous pouvez aussi écrire un test pour vérifier que votre méthode renvoie bien une exception TypeError
dans ce cas.
Les tests unitaires
joueur_service.py
class JoueurService:
def creer(self, pseudo, mdp, age, mail, fan_pokemon) -> Joueur:
nouveau_joueur = Joueur(
pseudo=pseudo,
mdp=hash_password(mdp, pseudo),
age=age,
mail=mail,
fan_pokemon=fan_pokemon,
)
creation_ok = JoueurDao().creer(nouveau_joueur)
if creation_ok:
return nouveau_joueur
else
return None
test_joueur_service.py
from unittest.mock import MagicMock
def test_creer_ok():
""" "Création de Joueur réussie"""
# GIVEN
pseudo, mdp, age, mail, fan_pokemon = "jp", "1234", 15, "z@mail.oo", True
JoueurDao().creer = MagicMock(return_value=True)
# WHEN
joueur = JoueurService().creer(pseudo, mdp, age, mail, fan_pokemon)
# THEN
assert joueur.pseudo == pseudo
Au début !
Tip
Plus on teste tôt ➡️ plus les tests sont efficaces et peu coûteux !
La meilleure pratique :
Cela paraît un peu étrange, mais en fait pas tant que ça.
Lorsque vous codez une fonction, vous savez avant de commencer :
Important
Avantages >>> Incovénients