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で利用可能です、、あなたのバージョンは何
ですか

1
私のバージョンは2.7です。代替手段はありますか?
リチャードノップ2012

1
グーグルによると、これは2.7でも機能するはずです。
リチャードノップ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
ボリス

19

Python 2.7の場合:

モックをインストールします。

pip install mock

次に、テストコードで、次のインポートを使用します。

from mock import patch, MagicMock

13

Python2とPython3の両方をサポートする場合は、次を使用することもできます。

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.6pythonでした。pip installfromを実行してからvirtualenvpytestfromを使用して修正しましたenv/bin/pytest



3

変化する

import mock

from unittest import mock

これunittest.mock 、がPython 3.3以降の組み込みモジュールであるために発生しますが、古いバージョンのPyPIにはバックポートがありとしてインストールしpip install mockてからインポートすることができますimport mock

Python 3.3以降を使用している場合は、pip installを行う必要はなく、としてインポートするだけfrom unittest import mockです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.