Retour au cours

tests avec pytest : tests, assertions, fixtures simples

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.parametrize pour 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

  1. tester une fonction median(xs) (pair/impair).
  2. utiliser tmp_path pour créer un fichier et le lire.
  3. marquer un test lent et l’exclure (-m "not slow").