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.


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.


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

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

5

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

from unittest import mock

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.



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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.