2 points par tmdgusya 2026-01-03 | Aucun commentaire pour le moment. | Partager sur WhatsApp

En écrivant du code de test avec Pytest et en utilisant MagicMock, vous avez sans doute déjà connu ces moments où l’autocomplétion de l’IDE ne fonctionne pas, ou bien où vous perdez du temps à cause d’une faute de frappe dans un nom de méthode.

Les mocks existants sont très puissants, mais les indications de type se perdent, ce qui rend difficile de profiter de l’aide de vérificateurs de types comme mypy ou pyright. Pour résoudre ce problème, j’ai créé typed-pytest, qui prend en charge le mocking sûr du point de vue des types (type-safe mocking).

Principales fonctionnalités :

  • Autocomplétion IDE complète : prise en charge de l’autocomplétion non seulement pour les noms de méthodes et paramètres de la classe réelle, mais aussi pour les méthodes propres aux mocks comme assert_called_once_with.
  • Détection des fautes de frappe au lint time : si vous appelez une méthode inexistante ou fournissez de mauvais arguments, l’erreur est détectée immédiatement avant l’exécution des tests (par mypy/pyright).
  • Générateur de stubs dédié : analyse les classes du projet et génère automatiquement des fichiers d’indications de type (.pyi). (Prend aussi en charge les classes avec des dépendances externes comme FastAPI, SQLAlchemy, etc.)
  • Backend flexible : si vous voulez de la rapidité, choisissez inspect ; si vous avez besoin d’indications de type de retour plus précises, vous pouvez choisir le backend stubgen. (stubgen est actuellement expérimental)

Exemple d’utilisation :

# MagicMock classique : impossible de repérer une faute de frappe avant l’exécution  
mock = MagicMock(spec=UserService)  
mock.get_usr(1) # faute de frappe pour get_user, mais le linter ne la détecte pas  
  
# typed-pytest : le linter signale immédiatement une erreur et l’autocomplétion fonctionne  
from typed_pytest_stubs import typed_mock, UserService  
  
mock = typed_mock(UserService)  
mock.get_usr # ❌ Error: "get_usr" is not a member of UserService  
mock.get_user.assert_called_once_with(user_id=1) # ✅ vérification de type réussie  

Les fichiers de stubs générés sont conçus pour être utilisés uniquement dans l’environnement de développement local et en CI, sans qu’il soit nécessaire de les versionner dans Git. La compatibilité avec des outils modernes comme uv a également été prise en compte.

GitHub: https://github.com/tmdgusya/typed-pytest

J’espère que cela sera utile à celles et ceux qui veulent profiter pleinement des avantages du système de types, même dans le code de test. Les retours pour améliorer l’ergonomie sont toujours les bienvenus !!

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.