ImportError: Kein Modul namens mock

82

Ich versuche also, unittest.mock zu verwenden, um einige meiner Methoden in meinen Unit-Tests zu verspotten. Ich mache:

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

Aber ich bekomme:

ImportError: No module named mock

Ich habe es versucht:

pip install mock

Es funktioniert immer noch nicht.

Richard Knop
quelle
1
dieses Modul in der Version 3.3 verfügbar ist ,, was ist Ihre Version
avasal
1
Meine Version ist 2.7. Gibt es eine Alternative?
Richard Knop
1
Laut Google sollte dies auch auf 2.7 funktionieren.
Richard Knop

Antworten:

111

unittestist ein eingebautes Modul; mockist eine externe Bibliothek (jedenfalls Betas vor 3.3). Nach der Installation mocküber pip installimportieren Sie es nicht mit

from unittest.mock import MagicMock

aber

from mock import MagicMock

Bearbeiten: mockwurde in das unittestModul aufgenommen (seit Python3.3) und kann von importiert werden import unittest.mock.

DSM
quelle
Unter Python 3.3+ müssen Sie das Gegenteil von dem tun, was diese Antwort vorschlägt:from unittest.mock import MagicMock
Boris
19

Für Python 2.7:

Mock installieren:

pip install mock

Verwenden Sie dann im Testcode diesen Import:

from mock import patch, MagicMock
Drew
quelle
13

Wenn Sie sowohl Python 2 als auch Python 3 unterstützen möchten, können Sie auch Folgendes verwenden:

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

oder, wenn Sie nicht importieren möchten sys

try:
    from unittest.mock import MagicMock
except ImportError:
    from mock import MagicMock
LSchueler
quelle
6

Aus irgendeinem Grund hat import unittest.mockes bei mir nicht funktioniert, ich musste es tun

from unittest import mock
friederbluemle
quelle
4

Beim Ausführen traten beim Import Probleme auf pytest. Es stellte sich heraus, dass meine pytestVersion 2.7 war python, während meine Version virtualenv3.6 war python. Ich habe es behoben, indem ich ein pip installfrom von meinem gemacht virtualenvund dann das pytestfrom verwendet habe env/bin/pytest.

Joseph
quelle
3

Veränderung

import mock

zu

from unittest import mock

Dies liegt daran, dass unittest.mock es sich um ein integriertes Modul handelt , das mit Python 3.3 beginnt. Für ältere Versionen gibt es jedoch einen Backport auf PyPI , den Sie installieren pip install mockund dann importieren können import mock.

Wenn Sie Python 3.3 oder höher verwenden, müssen Sie nichts per Pip installieren, sondern müssen es nur als importieren from unittest import mock.

Boris
quelle