Pourquoi python se moquer de patch ne fonctionne pas?
J'ai deux fichiers
spike.py
class T1(object):
def foo(self, afd):
return "foo"
def get_foo(self):
return self.foo(1)
def bar():
return "bar"
test_spike.py:
from unittest import TestCase
import unittest
from mock import patch, MagicMock
from spike import T1, bar
class TestStuff(TestCase):
@patch('spike.T1.foo', MagicMock(return_value='patched'))
def test_foo(self):
foo = T1().get_foo()
self.assertEqual('patched', foo)
@patch('spike.bar')
def test_bar(self, mock_obj):
mock_obj.return_value = 'patched'
bar = bar()
self.assertEqual('patched', bar)
if __name__ == "__main__":
unittest.main()
Quand je lance python test_spike.py
, le premier cas de test passerait, mais la seconde serait un échec.
et je passe à utiliser nosetests test_spike.py
, puis les deux les deux sont pas.
Je ne comprends pas comment c'est arrivé? Ces cas censés passer tous les.
OriginalL'auteur LeoShi | 2013-11-27
Vous devez vous connecter pour publier un commentaire.
Pour test_foo vous n'êtes pas à l'aide de patch correctement. Vous devriez être en utilisant comme ceci:
qui me donne:
Maintenant le deuxième exemple ne fonctionne pas parce que vous importez de la fonction de la barre (obtenir une référence à elle) et puis essayer de s'en moquer. Lorsque vous moquer de quelque chose que vous ne pouvez pas changer ce que vos variables d'attente (référence à la fonction d'origine). Pour corriger cela, vous devez utiliser @falsetru méthode suggérée comme:
cela me donne:
Mais quand j'essaie de le lancer avec le nez j'obtiens:
Cela se fait parce que je suis patcher pas à la bonne place. Ma structure de répertoire est:
et je exécuter des tests à partir répertoire src donc je devrais être patcher en utilisant un chemin de répertoire racine du projet comme:
et cela me donnerait:
ou si je suis au répertoire test:
OriginalL'auteur Žilvinas Rudžionis
Accès
bar
à l'aide despike.bar
. Importésbar
n'est pas affecté parmock.patch
.python test_spike.py
, mais pourquoi est-il encore ne pas fonctionne pournosetests test_spike.py
?Désolé, je ne sais pas à ce sujet.
"Importés de la barre n'est pas affecté par la maquette.patch" --> Cela a sauvé ma vie!
OriginalL'auteur falsetru