Mock patching à partir de l'instruction / import en Python
J'essaie de me faire moquer.patch sur le morceau de code exemple:
from mock import patch
from collections import defaultdict
with patch('collections.defaultdict'):
d = defaultdict()
print 'd:', d
Ce sorties suivantes:
d: defaultdict(None, {})
Ce qui signifie que defaultdict n'a pas été patché.
Si je remplace la déclaration d'importation avec un droit d'importation déclaration de travaux:
from mock import patch
import collections
with patch('collections.defaultdict'):
d = collections.defaultdict()
print 'd:', d
De sortie est:
d: <MagicMock name='defaultdict()' id='139953944084176'>
Est-il un moyen de patcher un appel à l'aide de/l'importation?
Merci
source d'informationauteur oneself
Vous devez vous connecter pour publier un commentaire.
Si vous êtes correctifs quelque chose dans le même module, vous pouvez utiliser
__main__
:Si vous êtes moqueur quelque chose pour l'importation d'un module, cependant, vous aurez envie d'utiliser ce module nom donc la bonne référence (ou le nom) est patché:
Le point ici est que le patch veut que le chemin d'accès complet à la chose dont elle est l'application de correctifs. Cela semble un peu bizarre quand correctifs quelque chose dans le module en cours, car les gens ne les utilisent pas souvent
__main__
(ou se référer au module en cours, d'ailleurs).patch
œuvres en bidouillant noms. Vous ne pouvez pas obtenir quoi que ce soit par la correction du nom decollections.defaultdict
si vous utilisez le nomdefaultdict
(dans l'espace de noms local) pour accéder à l'objet. Consultez la documentation à http://www.voidspace.org.uk/python/mock/patch.html#id1 .