ImportError: Żaden moduł o nazwie mock


83

Więc próbuję użyć unittest.mock, aby podrobić niektóre z moich metod w moich testach jednostkowych. Ja robię:

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

Ale dostaję:

ImportError: No module named mock

Próbowałem:

pip install mock

Nadal nie działa.


1
ten moduł jest dostępny w wersji 3.3, jaka jest twoja wersja
avasal

1
Moja wersja to 2.7. Czy jest jakaś alternatywa?
Richard Knop,

1
Według Google powinno to działać również w wersji 2.7.
Richard Knop,

Odpowiedzi:


111

unittestto wbudowany moduł; mockjest biblioteką zewnętrzną (w każdym razie w wersji beta w wersji starszej niż 3.3). Po zainstalowaniu mockprzez pip install, importujesz go nie używając

from unittest.mock import MagicMock

ale

from mock import MagicMock

Edycja: mockzostała zawarta w unittestmodule (od Python3.3) i może być importowana przez import unittest.mock.


W Pythonie 3.3+ musisz zrobić odwrotność tego, co sugeruje ta odpowiedź:from unittest.mock import MagicMock
Boris

19

W przypadku Pythona 2.7:

Zainstaluj makietę:

pip install mock

Następnie w kodzie testowym użyj tego importu:

from mock import patch, MagicMock

13

Jeśli chcesz obsługiwać oba, Python 2 i Python 3, możesz również użyć następujących:

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

lub, jeśli nie chcesz importować sys

try:
    from unittest.mock import MagicMock
except ImportError:
    from mock import MagicMock

6

Z jakiegoś powodu import unittest.mockmi nie wyszło, musiałem to zrobić

from unittest import mock

4

Podczas uruchamiania napotkałem problemy podczas importowania pytest. Okazało się, że moja pytestbyła to wersja 2.7 python, podczas gdy moja virtualenvbyła to 3.6 python. Naprawiłem to, wykonując pip installfrom my, virtualenva następnie używając pytestfrom env/bin/pytest.



3

Zmiana

import mock

do

from unittest import mock

Dzieje się tak, ponieważ unittest.mock jest to wbudowany moduł zaczynający się od Pythona 3.3, ale istnieje backport w PyPI dla starszych wersji, który można zainstalować jako, pip install mocka następnie zaimportować jako import mock.

Jeśli używasz Pythona 3.3 lub nowszego, nie musisz niczego instalować za pomocą pip, wystarczy zaimportować go jako plik from unittest import mock.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.