Se moquant d'une méthode de classe et de changer certains des attributs d'un objet en Python
Je suis nouvelle maquette en Python. Je veux savoir comment remplacer (fictif) d'une méthode de classe en testant avec un autre, sachant qu'à l'origine, seulement des modifications de certains attributs de l'auto sans aucun retour de valeur. Par exemple:
def some_method(self):
self.x = 4
self.y = 6
Donc, ici, je ne peux pas juste changer le return_value de la maquette. J'ai essayé de définir une nouvelle fonction (qui doit remplacer l'original) et il donne comme side_effect à la maquette. Mais comment puis-je faire de la dérision de la fonction de modifier les attributs de l'objet dans la classe.
Voici mon code:
@patch('path.myClass.some_method')
def test_this(self,someMethod):
def replacer(self):
self.x = 5
self.y = 16
some_method.side_effect = replacer
Donc comment Python comprend maintenant l' self
argument de la poudre? C'est que le soi de la classe de test, ou de l'auto comme un objet de la classe sous test?
OriginalL'auteur Ahmed Ayadi | 2015-12-22
Vous devez vous connecter pour publier un commentaire.
Des excuses par avance si je ne comprends pas ce que vous essayez de faire, mais je pense que cela peut fonctionner:
Cela remplace some_method() avec other_method() lors de la mise à jour, qui définit les différentes valeurs pour les attributs x, y, et lorsque le test est exécuté, il donne les résultats:
EDIT: pour répondre à la question sur la façon de faire à l'intérieur de la fonction de test sans se moquant d'une classe...
Assurez-vous d'appeler la méthode start() et stop() sur le patcher sinon, vous pouvez vous retrouver dans une situation où le patch est active et que vous ne voulez pas qu'il soit. Notez que pour définir la maquette de la fonction à l'intérieur de la test code de la fonction, je n'ai pas utilisé le patch en tant que décorateur, parce que la simulation de la fonction doit être définie avant d'utiliser le "nouveau" mot-clé dans le patch. Si vous souhaitez utiliser le patch comme un décorateur, vous devez définir la maquette de la fonction de quelque part avant le patch, en le définissant à l'intérieur de MyTestClass fonctionne aussi, mais il semble que vous voulez vraiment avoir la fantaisie de la fonction définie à l'intérieur de votre test de code de la fonction.
EDIT: ajout du résumé de 4 façons je vois pour ce faire...
Aucun de ces utilise un side_effect, mais ils ont tous de résoudre le problème de se moquer d'une méthode de classe et de changer certains attributs. Celui que vous choisissez dépend de l'application.
Oui, il est possible de définir la maquette de la fonction à l'intérieur de la fonction de test de code, mais je ne suis pas sûr au sujet de l'aide d'un side_effect. Voir mon edit de mon post. PS. si cette réponse permet de résoudre votre question, nous vous prions d'accepter, merci!
Merci beaucoup 🙂 Qui ne veut répondre à ma question
Vous êtes les bienvenus!
OriginalL'auteur Steve Misuta