Introduction
Les tests unitaires sont une partie essentielle de la construction de logiciels robustes et faciles à maintenir. En écrivant des tests pour des unités de code individuelles, vous vous assurez que vos fonctions se comportent comme prévu et vous pouvez détecter les bogues dès le début du processus de développement. Dans ce guide, nous vous présentons pytest - un puissant cadre de test pour Python - et nous vous montrons comment écrire des tests, adopter des pratiques de développement piloté par les tests (TDD) et incorporer des exemples du monde réel dans votre flux de travail.
Pourquoi les tests unitaires et le TDD?
Les tests vous aident à détecter les erreurs à un stade précoce et vous donnent la confiance nécessaire pour remanier le code sans casser les fonctionnalités. Le développement piloté par les tests (TDD) va plus loin en écrivant des tests avant le code lui-même, en guidant votre conception et en garantissant une base de code robuste.
Démarrer avec pytest
Installer pytest
Pour commencer, installez pytest à l’aide de pip:
pip install pytest
Écrire votre premier test
Créons une fonction simple et écrivons un test pour elle. Supposons que nous ayons une fonction add
:
def add(a, b):
return a + b
Maintenant, créez un test pour cette fonction:
def test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0
Pour lancer le test, exécutez pytest
dans votre terminal.
Développement piloté par les tests (TDD) avec pytest
Le TDD consiste à écrire des tests avant d’écrire le code. Voici un flux de travail simple:
- Écrivez un test qui définit le comportement souhaité d’une fonction.
- Exécutez le test pour le voir échouer.
- Écrire le code minimal nécessaire pour réussir le test.
- Remanier le code si nécessaire, et répéter l’opération.
Exemple : Flux de travail TDD
Supposons que nous ayons besoin d’une fonction multiply
qui multiplie deux nombres. Nous commençons par écrire un test:
def test_multiply():
assert multiply(3, 4) == 12
assert multiply(-2, 5) == -10
Lancez pytest, et vous verrez que le test échoue parce que multiply
n’est pas défini. Maintenant, implémentez la fonction:
def multiply(a, b):
return a * b
Réexécutez pytest pour vous assurer que le test est réussi.
Fonctionnalités avancées de pytest
Tests paramétrés
pytest vous permet d’exécuter une fonction de test avec différents ensembles d’entrées en utilisant le décorateur @pytest.mark.parametrize
.
#| label: parameterized-tests, code-fold: true
import pytest
@pytest.mark.parametrize("a,b,expected", [
2, 3, 6),
(5, 5, 25),
(-1, 8, -8),
(
])def test_multiply_param(a, b, expected):
assert multiply(a, b) == expected
Fixtures dans pytest
Les pytest
vous permettent de configurer des données ou un état avant d’exécuter des tests et de les nettoyer par la suite.
import pytest
@pytest.fixture
def sample_data():
return [1, 2, 3, 4, 5]
def test_sum(sample_data):
assert sum(sample_data) == 15
Meilleures pratiques pour les tests unitaires
- Écrire des tests pour chaque fonction:
Assurez-vous que chaque unité de votre code a des tests correspondants. - Garder les tests indépendants:
Les tests ne doivent pas dépendre les uns des autres ; chaque test doit établir son propre contexte. - Utiliser des noms de tests descriptifs:
Nommez clairement vos fonctions de test afin que les échecs soient faciles à diagnostiquer. - Exploiter les fixtures et la paramétrisation:
Utilisez ces fonctionnalités pour écrire des tests plus propres et plus efficaces. - Exécuter les tests fréquemment:
Intégrer les tests dans votre processus de développement pour détecter rapidement les problèmes.
Conclusion
En adoptant pytest et les pratiques TDD, vous pouvez construire une suite de tests robuste qui améliore la qualité et la fiabilité du code. Ce guide vous a présenté les bases de l’écriture de tests, de la création de fixtures, de la paramétrisation des tests et du suivi des flux de travail TDD en Python. Avec ces outils, vous serez mieux équipé pour maintenir et faire évoluer vos projets.
Plus d’informations
- Python Automation : Planification et automatisation des tâches
- Construire des API REST avec FastAPI : un framework Python moderne
Testez avec plaisir, et appréciez la construction d’applications Python fiables avec pytest!
Explorer d’autres articles
Voici d’autres articles de la même catégorie pour vous aider à approfondir le sujet.
Réutilisation
Citation
@online{kassambara2024,
author = {Kassambara, Alboukadel},
title = {Tests unitaires en Python avec pytest : Un guide complet},
date = {2024-02-08},
url = {https://www.datanovia.com/fr/learn/programming/python/tools/pytest-unit-testing.html},
langid = {fr}
}