ImportError: Không có mô-đun nào có tên mô-đun


81

Vì vậy, tôi đang cố gắng sử dụng unittest.mock để mô phỏng một số phương pháp của tôi trong các bài kiểm tra đơn vị của tôi. Tôi làm:

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

Nhưng tôi đang nhận được:

ImportError: No module named mock

Tôi đã thử:

pip install mock

Nó vẫn không hoạt động.


1
mô-đun này có sẵn trong phiên bản 3.3, phiên bản của bạn là gì
avasal

1
Phiên bản của tôi là 2.7. Có cách nào thay thế không?
Richard Knop,

1
Theo Google, điều này cũng sẽ hoạt động trên 2.7.
Richard Knop,

Câu trả lời:


110

unittestlà một mô-đun tích hợp sẵn; mocklà một thư viện bên ngoài (dù sao thì trước 3.3 bản beta). Sau khi cài đặt mockqua pip install, bạn nhập nó không phải bằng cách sử dụng

from unittest.mock import MagicMock

nhưng

from mock import MagicMock

Chỉnh sửa: mockđã được bao gồm trong unittestmô-đun (kể từ Python3.3) và có thể được nhập bởi import unittest.mock.


Trên Python 3.3+, bạn cần làm ngược lại với những gì câu trả lời này gợi ý:from unittest.mock import MagicMock
Boris

18

Đối với Python 2.7:

Cài đặt mô hình:

pip install mock

Sau đó, trong mã thử nghiệm, sử dụng nhập này:

from mock import patch, MagicMock

12

Nếu bạn muốn hỗ trợ cả Python 2 và Python 3, bạn cũng có thể sử dụng như sau:

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

hoặc, nếu bạn không muốn nhập sys

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

5

Vì lý do nào đó, import unittest.mockkhông làm việc cho tôi, tôi phải làm

from unittest import mock

4

Tôi đã gặp vấn đề về nhập khi chạy pytest. Hóa ra của tôi pytestlà phiên bản 2.7 python, trong khi của tôi virtualenvlà 3.6 python. Tôi đã sửa nó bằng cách thực hiện một pip installtừ của tôi virtualenvvà sau đó sử dụng pytesttừ env/bin/pytest.



3

Thay đổi

import mock

đến

from unittest import mock

Điều này xảy ra vì unittest.mock là một mô-đun dựng sẵn bắt đầu với Python 3.3, nhưng có một cổng hỗ trợ trên PyPI cho các phiên bản cũ hơn, bạn có thể cài đặt dưới dạng pip install mockvà sau đó nhập dưới dạng import mock.

Nếu bạn đang sử dụng Python 3.3 trở lên, bạn không cần phải cài đặt bất kỳ thứ gì, bạn chỉ cần nhập nó dưới dạng from unittest import mock.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.