Python se moquer de variable d'instance de classe
Je suis en utilisant Python mock
de la bibliothèque. Je sais comment simuler une instance de la classe de la méthode en suivant les document:
>>> def some_function():
... instance = module.Foo()
... return instance.method()
...
>>> with patch('module.Foo') as mock:
... instance = mock.return_value
... instance.method.return_value = 'the result'
... result = some_function()
... assert result == 'the result'
Toutefois, il a essayé de simuler une variable d'instance de classe, mais ne fonctionne pas (instance.labels
dans l'exemple suivant):
>>> with patch('module.Foo') as mock:
... instance = mock.return_value
... instance.method.return_value = 'the result'
... instance.labels = [1, 1, 2, 2]
... result = some_function()
... assert result == 'the result'
Fondamentalement, je veux instance.labels
sous some_function
obtenir la valeur que je veux. Un indice?
OriginalL'auteur clwen | 2013-07-18
Vous devez vous connecter pour publier un commentaire.
Cette version de
some_function()
imprime moquélabels
propriété:Mon
module.py
:Application de correctifs est la même que la vôtre:
Pleine session de console:
Pour moi votre code est de travail.
instance.labels = [1, 1, 2, 2]
, qui est-ce moqué de variable ne seront pas utilisées parsome_function
. Dans la documentation il est moqueur, la méthode de l'épuisement à la place de la variable.Mise à jour de ma réponse. Maintenant, je suis perdu parce que votre code de travail.
Dans mon code,
labels
apparaît seulement après l'appel de la fonction. Et que la fonction est appelée dans la fonction que je veux tester. C'est peut-être la raison. J'arrive à la fin se moquer de l'initialisation de la classe de sorte qu'il renvoie à l'objet fantaisie avec le comportement que je veux.Je veux soulever une exception quand je suis dule.Foo instance est créée. J'ai donc essayé les deux se moquer.side_effect et de se moquer.return_value. Les deux n'ont pas de travail. Pourquoi?
C'est une autre question et il n'y a pas de code, nous pouvons regarder, mais je pense que cette question est ce que vous êtes à la recherche pour les stackoverflow.com/questions/28305406/...
OriginalL'auteur twil