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.
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
.
Pour Python 2.7:
Installer une maquette:
pip install mock
Ensuite, dans le code de test, utilisez cette importation:
from mock import patch, MagicMock
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
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.
Pour certaines raisons, import unittest.mock
n'a pas fonctionné pour moi, je devais le faire
from unittest import mock
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
.