Trey Hunner (Français)

Trey Hunner (Français)

j’écris beaucoup de tests unitaires. Malheureusement, mon code nécessite souvent des correctifs de singe pour être correctement testé à l’unité. J’utilise fréquemment la fonction patch de la bibliothèque simulée de Michael Foord (maintenant disponible en Python 3.4 en tant qu’unittest.mock) pour Monkey patch mon code.

Tout en discutant avec d’autres utilisateurs de patch, j’ai réalisé que tout le monde semble avoir sa propre façon préférée de les utiliser. Dans ce post, je vais discuter de la façon dont j’utilise patch.,

Décorateur

patch peut être utilisé comme une méthode décorateur:

ou en tant que classe décorateur:

j’utilise le patch en tant que décorateur, quand j’ai une fonction que je veux patché lors de mon test. J’ai tendance à ne pas utiliser patch comme décorateur de classe et je vais vous expliquer pourquoi ci-dessous.

Décorateur exemple

Gestionnaire de Contexte

patch peut être utilisé comme un gestionnaire de contexte:

je préfère utiliser le patch en tant que gestionnaire de contexte quand je veux un patch de la fonction pour une partie seulement d’un test. Je n’utilise pas patch en tant que gestionnaire de contexte lorsque je veux qu’une fonction soit corrigée pour un test entier.,

exemple de gestionnaire de contexte

manuellement en utilisant start et stop

patch peut également être utilisé pour patcher/décompresser manuellement en utilisantstart Etstop méthodes:

je préfère utiliser patch en utilisant start / stop lorsque j’ai besoin d’une fonction à patcher pour chaque fonction

C’est probablement la façon la plus courante-je utiliser le patch dans mes tests. Je regroupe souvent mes tests en classes de test où chaque méthode est axée sur le test de la même fonction. Par conséquent, je veux généralement les mêmes fonctions/objets patchés pour chaque méthode de test.,

j’ai noté ci-dessus que je préfère ne pas utiliser de décorateurs de classe pour résoudre ce problème. Au lieu de cela, je préfère utiliser des attributs de classe de test pour stocker des références à des fonctions corrigées au lieu d’accepter des arguments de patch sur chaque méthode de test avec des décorateurs. Je trouve ça plus sec.

avertissement: L’un des principaux avantages des formes de patch décorateur/gestionnaire de contexte est qu’elles gèrent le nettoyage pour vous. Chaque fois que vous appelez start pour configurer votre objet patch, n’oubliez pas d’appeler stop pour le nettoyer., Sinon, vous aurez une fonction/objet patché singe pour le reste de votre programme en cours d’exécution.

de démarrer et d’arrêter exemple

Résumé

Patch peut être utilisé:

  1. une méthode ou une classe décorateur
  2. un gestionnaire de contexte
  3. utilisation de la méthode start et stop

je préfère mes tests pour être lisible, SEC et facile à modifier. J’ai tendance à utiliser des méthodes start/stop pour cette raison, mais j’utilise aussi fréquemment des décorateurs de méthodes de patch et parfois des gestionnaires de contexte de patch., Il est utile de connaître les différentes saveurs de patch car votre saveur préférée n’est peut-être pas toujours la plus adaptée au problème en question.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *