ImportError : mock이라는 모듈이 없습니다.


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입니다. 대안이 있습니까?
Richard Knop 2012

1
Google에 따르면 이것은 2.7에서도 작동합니다.
Richard Knop 2012

답변:


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
Boris

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이고 내 버전은 virtualenv3.6 버전이었습니다 python. pip install내에서 a 를 수행 한 virtualenv다음 pytestfrom env/bin/pytest.



3

변화

import mock

...에

from unittest import mock

이는 Python 3.3으로 시작 unittest.mock 하는 내장 모듈 이기 때문에 발생 하지만 이전 버전의 경우 PyPI백 포트가pip install mock 있으므로 import mock.

Python 3.3 이상을 사용하는 경우 pip를 설치할 필요가 없으며 from unittest import mock.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.