ImportError: ningún módulo llamado mock

81

Así que estoy tratando de usar unittest.mock para simular algunos de mis métodos en mis pruebas unitarias. Hago:

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

Pero estoy obteniendo:

ImportError: No module named mock

Lo intenté:

pip install mock

Todavía no funciona.

Richard Knop
fuente
1
este módulo está disponible en la versión 3.3, cuál es su versión
avasal
1
Mi versión es la 2.7. ¿Existe alguna alternativa?
Richard Knop
1
Según Google, esto debería funcionar también en 2.7.
Richard Knop

Respuestas:

110

unittestes un módulo incorporado; mockes una biblioteca externa (de todas formas, versiones anteriores a 3.3). Después de instalar a mocktravés pip install, lo importa no usando

from unittest.mock import MagicMock

pero

from mock import MagicMock

Editar: mockse ha incluido en el unittestmódulo (desde Python3.3) y puede ser importado por import unittest.mock.

DSM
fuente
En Python 3.3+, debe hacer lo contrario de lo que sugiere esta respuesta:from unittest.mock import MagicMock
Boris
18

Para Python 2.7:

Instalar simulacro:

pip install mock

Luego, en el código de prueba, use esta importación:

from mock import patch, MagicMock
Dibujó
fuente
12

Si desea admitir tanto Python 2 como Python 3, también puede usar lo siguiente:

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

o, si no desea importar sys

try:
    from unittest.mock import MagicMock
except ImportError:
    from mock import MagicMock
LSchueler
fuente
5

Por alguna razón, import unittest.mockno funcionó para mí, tuve que hacer

from unittest import mock
friederbluemle
fuente
4

Estaba enfrentando problemas de importación al ejecutar pytest. Resultó ser mi pytestversión 2.7 python, mientras que mi virtualenvera 3.6 python. Lo arreglé haciendo un pip installfrom my virtualenvy luego usando el pytestfrom env/bin/pytest.

Joseph
fuente
3

Cambio

import mock

a

from unittest import mock

Esto sucede porque unittest.mock es un módulo incorporado que comienza con Python 3.3, pero hay un backport en PyPI para versiones anteriores, que puede instalar pip install mocky luego importar como import mock.

Si está usando Python 3.3 o posterior, no necesita instalar nada, solo tiene que importarlo como from unittest import mock.

Boris
fuente