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.

Richard Knop
źródło
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.

DSM
źródło
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
Rysował
źródło
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
LSchueler
źródło
6

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

from unittest import mock
friederbluemle
źródło
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.

józef
źródło
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.

Boris
źródło