Cannot pickle Mock/MagicMock objects, or use them with multiprocessing

Đang mở
#100,090 0 bình luận 27 reaction 1 người được giao Xem trên GitHub

@johnslavik đang làm issue này rồi.

Từ ngày 26/7/2026.

Đánh giá

Issue này chưa được đánh giá.

Mô tả

stdlib type-feature

Mocks and MagicMocks from the unittest.mock packages cannot be pickled, which means that unittests that call multiprocessing code with a mock will fail. Example:

from unittest.mock import Mock, MagicMock
import pickle

class Foo:
    pass

pickle.dumps(Mock(spec=Foo))
pickle.dumps(MagicMock(spec=Foo))

Both of the pickle.dumps commands at the bottom raise: PicklingError: args[0] from __newobj__ args has the wrong class. The same exception is raised when calling e.g. multiprocess.starmap where one of the starmap parameters is the mocked object, but it took me quite some time to dig into the starmap arguments to figure this out.

I'm running python version 3.10.6.

This appears to be the same issue as described in #58782, but that was closed in 2012 with an implication that this is intended behavior, and "it looks like implementing __reduce__ is sufficient for my use case", but no explanation of how to properly implement said __reduce__. At the very least, including some information in e.g. the unittest.mock or pickle documentation about how to work around this would be very useful.

Ngôn ngữ chính
Python
Star
77.2k
Fork
36k
Merge trung bình
1 ngày 9 giờ
Pull request đã merge (30 ngày)
558

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của python/cpython

Tất cả issue của python/cpython

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.