La seule chose qui peut être utilisée est le faux.Farceur profonde avec remplacement de la méthode
#tested.py
from somemodule import somelogger
class MyClass(object):
def __init__(self):
self.logger = somelogger()
def do_smth(self):
self.logger.log(message)
Importantdétail: Module somemodule
n'existe pas, donc les solutions habituelles comme @patch ne pas suite.
J'ai besoin de se moquer somemodule
somelogger's
méthode log
pour qu'il effectue impression simple:
#tests.py
from tested import MyClass
def test_logging():
obj = MyClass()
obj.do_smth('some_message')
Dans la console:
some_message
Avez-vous essayé cet exemple? Quelle version de python? – sann05
Ceci est pour python 3.6. J'ai fait des simulations similaires dans des systèmes plus complexes et tout a bien fonctionné. Si vous utilisez 2.7.x, alors mock doit être installé en premier et vous devrez importer mock au lieu de unittest.mock. – suripoori
Désolé j'ai manqué un détail crucial: module somemodule ** n'est pas ** ** suppose ** ** à ** ** existe **. Donc, quand nous essayons de l'importer, nous obtenons toujours ImportError: Aucun module nommé ** somemodule ** – sann05