web-dev-qa-db-fra.com

ImportError: Aucun module nommé mock

J'essaie donc d'utiliser unittest.mock pour me moquer de certaines de mes méthodes dans mes tests unitaires. Je fais:

from unittest.mock import MagicMock
f = open("data/static/mock_ffprobe_response")
subprocess.check_output = MagicMock(return_value=f.read())
f.close()

Mais j'obtiens:

ImportError: No module named mock

J'ai essayé:

pip install mock

Cela ne fonctionne toujours pas.

69
Richard Knop

unittest est un module intégré; mock est une bibliothèque externe (les versions antérieures à 3.3, en tout cas). Après avoir installé mock via pip install, vous l’importez pas en utilisant

from unittest.mock import MagicMock

mais

from mock import MagicMock

Edit: mock a été inclus dans le module unittest (depuis Python3.3) et peut être importé par import unittest.mock.

89
DSM

Pour Python 2.7:

Installer une maquette:

pip install mock

Ensuite, dans le code de test, utilisez cette importation:

from mock import patch, MagicMock
15
Drew

Si vous souhaitez prendre en charge les deux, Python 2 et Python 3, vous pouvez également utiliser les éléments suivants:

import sys
if sys.version_info >= (3, 3):
    from unittest.mock import MagicMock
else:
    from mock import MagicMock

ou, si vous ne voulez pas importer sys

try:
    from unittest.mock import MagicMock
except ImportError:
    from mock import MagicMock
9
MosteM

Pour votre version, je suggérerais d'aller à http://hg.python.org/cpython/file/default/Lib/unittest/mock.py et d'utiliser cette source à votre avantage.

3
avasal

Pour certaines raisons, import unittest.mock n'a pas fonctionné pour moi, je devais le faire

from unittest import mock
2
friederbluemle

J'étais confronté à des problèmes d'importation lors de l'exécution de pytest. Il s'est avéré que mon pytest était de la version 2.7 de python, alors que mon virtualenv était un 3.6 python. Je l'ai corrigé en faisant un pip install de mon virtualenv puis en utilisant le pytest de env/bin/pytest.

1
joseph