ImportError: нет модуля с именем mock

Поэтому я пытаюсь использовать unittest.mock для имитации некоторых моих методов в моих модульных тестах. Я делаю:

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

Но я получаю:

ImportError: No module named mock

Я пытался:

pip install mock

Это все еще не работает.


person Richard Knop    schedule 16.07.2012    source источник
comment
этот модуль доступен в версии 3.3, какая у вас версия   -  person avasal    schedule 16.07.2012
comment
Моя версия 2.7. Есть ли альтернатива?   -  person Richard Knop    schedule 16.07.2012
comment
Согласно Google, это должно работать и на 2.7.   -  person Richard Knop    schedule 16.07.2012


Ответы (7)


unittest - встроенный модуль; mock - внешняя библиотека (во всяком случае, до 3.3 бета). После установки mock через pip install вы импортируете его, не используя

from unittest.mock import MagicMock

но

from mock import MagicMock

Изменить: mock был включен в модуль unittest (начиная с Python3.3) и может быть импортирован import unittest.mock.

person DSM    schedule 16.07.2012
comment
В Python 3.3+ вам нужно сделать противоположное тому, что предлагает этот ответ: from unittest.mock import MagicMock - person Boris; 03.06.2020

Для Python 2.7:

Установить макет:

pip install mock

Затем в тестовом коде используйте этот импорт:

from mock import patch, MagicMock
person Drew    schedule 20.09.2017

Если вы хотите поддерживать оба, Python 2 и Python 3, вы также можете использовать следующее:

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

или, если вы не хотите импортировать sys

try:
    from unittest.mock import MagicMock
except ImportError:
    from mock import MagicMock
person LSchueler    schedule 04.06.2018

У меня почему-то import unittest.mock не получилось, пришлось сделать

from unittest import mock
person friederbluemle    schedule 21.04.2018

Изменять

import mock

to

from unittest import mock

Это происходит потому, что unittest.mock является встроенным модулем, начиная с Python 3.3, но есть резервный порт на PyPI для более старых версий, который вы можете установить как pip install mock, а затем импортировать как import mock.

Если вы используете Python 3.3 или новее, вам не нужно ничего устанавливать по протоколу, вам просто нужно импортировать его как from unittest import mock.

person Boris    schedule 07.11.2019

У меня возникли проблемы с импортом при запуске pytest. Оказалось, что мой pytest был 2.7 версии python, а мой virtualenv был 3.6 python. Я исправил это, выполнив pip install из моего virtualenv, а затем используя pytest из env/bin/pytest.

person joseph    schedule 15.03.2019

Для вашей версии я бы предложил перейти на http://hg.python.org/cpython/file/default/Lib/unittest/mock.py и используйте этот источник в своих интересах.

person avasal    schedule 16.07.2012