les tests automatisés évitent les régressions et accélèrent la refacto.
objectifs
- écrire des tests unitaires simples
- utiliser fixtures et parametrize
- exécuter
pytest -q
explication détaillée
- découverte automatique
test_*.py - assertions python :
assert expr - fixtures pour préparer des ressources (
tmp_path) @pytest.mark.parametrizepour varier les cas
exemples exécutables
# src/calc.py
def add(a, b): return a + b
def div(a, b):
if b == 0: raise ZeroDivisionError
return a / b
# tests/test_calc.py
import pytest
from src.calc import add, div
def test_add():
assert add(2, 3) == 5
@pytest.mark.parametrize("a,b,res", [(4,2,2),(9,3,3)])
def test_div_ok(a,b,res):
assert div(a,b) == res
def test_div_zero():
with pytest.raises(ZeroDivisionError):
div(1,0)
pytest -q
bonnes pratiques
- tests indépendants les uns des autres
- noms explicites, un seul sujet par test
- utilisez les fixtures intégrées (
tmp_path,monkeypatch)
pièges courants
- dépendre de l’ordre d’exécution
- partager un état mutable global
- assertions vagues
exercices
- tester une fonction
median(xs)(pair/impair). - utiliser
tmp_pathpour créer un fichier et le lire. - marquer un test lent et l’exclure (
-m "not slow").