Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Mocking et Isolation des Tests | Testing with unittest and pytest
Concepts Avancés de Python

Mocking et Isolation des Tests

Glissez pour afficher le menu

Le mocking est une technique puissante en tests unitaires qui permet de remplacer certaines parties de votre système testé par des objets mock ou des fonctions simulées. L'objectif est d'isoler l'unité de code que vous testez de ses dépendances, telles que les bases de données, les API ou d'autres systèmes complexes. En utilisant des mocks, vous pouvez contrôler le comportement des dépendances et vous concentrer sur la logique de votre code dans un environnement maîtrisé.

L'isolation des tests est importante car elle garantit que les tests ne s'influencent pas mutuellement et ne sont pas affectés par des facteurs extérieurs à leur périmètre. Les tests isolés sont plus fiables et plus faciles à déboguer, car leurs résultats dépendent uniquement du code testé et des conditions spécifiques que vous définissez, et non de l'état ou du comportement de systèmes externes.

En Python, le module unittest.mock fournit des outils pour simuler des objets et des fonctions. Lorsque vous utilisez le mocking, vous pouvez remplacer une fonction ou un objet réel par un mock qui retourne des valeurs contrôlées ou enregistre la façon dont il a été utilisé. Cela est particulièrement utile lorsque votre code interagit avec des ressources lentes, imprévisibles ou indisponibles pendant les tests.

12345678910111213141516171819202122232425
import unittest from unittest.mock import patch def check_the_sky(): # Simulate a slow or unreliable API raise ConnectionError("API not available") def get_advice(): if check_the_sky(): return "Take an umbrella." else: return "Enjoy the sunshine!" class TestWeather(unittest.TestCase): @patch('__main__.check_the_sky') def test_advice_when_rainy(self, mock_check): mock_check.return_value = True self.assertEqual(get_advice(), "Take an umbrella.") @patch('__main__.check_the_sky') def test_advice_when_clear(self, mock_check): mock_check.return_value = False self.assertEqual(get_advice(), "Enjoy the sunshine!") unittest.main(argv=[''], exit=False)

Dans cet exemple de code, la fonction check_the_sky simule une dépendance externe peu fiable ou défaillante, comme une API météo qui peut ne pas toujours être disponible. La fonction get_advice contient la logique à tester — elle appelle check_the_sky et retourne un conseil en fonction du résultat.

La classe de test unittest utilise le mocking pour remplacer la vraie fonction check_the_sky par un mock qui retourne des valeurs contrôlées. Cela permet de tester le comportement de get_advice dans différents scénarios, comme lorsque le ciel est dégagé ou pluvieux, sans dépendre du système externe réel.

Le décorateur @patch est utilisé pour remplacer temporairement la vraie fonction check_the_sky par un objet mock pendant chaque méthode de test. L'objet mock est passé à la méthode de test sous le nom de paramètre mock_check. Vous utilisez mock_check pour définir la valeur de retour souhaitée pour ce test, afin de contrôler le comportement de votre code et ce qu'il retourne dans chaque scénario.

Note
Remarque

La fonction unittest.main() dans cette leçon inclut quelques paramètres supplémentaires nécessaires uniquement pour cet environnement d'apprentissage. Ils permettent au code de s'exécuter correctement sur la plateforme et ne font pas partie des concepts fondamentaux de Python que vous devez apprendre pour le moment.

En utilisant le mocking, vous isolez vos tests des systèmes externes qui peuvent être lents ou peu fiables. Cela rend vos tests rapides, reproductibles et déterministes, car vous contrôlez exactement ce que la dépendance retourne dans chaque cas de test.

question mark

Quand faut-il utiliser le mocking dans les tests unitaires ?

Sélectionnez toutes les réponses correctes

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 5. Chapitre 4

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Section 5. Chapitre 4
some-alt