ImportError: Немає модуля з іменем макет


83

Отже, я намагаюся використовувати 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

Це все ще не працює.


1
цей модуль доступний у версії 3.3 ,, яка ваша версія
avasal

1
Моя версія 2.7. Чи є якась альтернатива?
Річард Ноп,

1
На думку Google, це також має працювати на 2.7.
Річард Ноп,

Відповіді:


111

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

from unittest.mock import MagicMock

але

from mock import MagicMock

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


На Python 3.3+ потрібно робити протилежне тому, що пропонується у цій відповіді:from unittest.mock import MagicMock
Борис

19

Для Python 2.7:

Встановити макет:

pip install mock

Потім у тестовому коді використовуйте такий імпорт:

from mock import patch, MagicMock

13

Якщо ви хочете підтримувати обидва, 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

6

З якоїсь причини import unittest.mockу мене не вийшло, мені довелося це зробити

from unittest import mock

4

Під час запуску я стикався з проблемами імпорту pytest. Виявилося, що моя pytestверсія була версії 2.7 python, тоді як моя virtualenv- 3.6 python. Я виправив це, зробивши a pip installз мого, virtualenvа потім використовуючи pytestз env/bin/pytest.



3

Зміна

import mock

до

from unittest import mock

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

Якщо ви використовуєте Python 3.3 або пізнішої версії, вам не потрібно нічого встановлювати, а просто імпортувати як from unittest import mock.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.