[unittest.mock] `spec_set` should be applied after setting attributes via kwargs

Đang mở
#101,756 2 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
42/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
python
Lĩnh vực
testing

Hướng nghiên cứu

Bắt đầu từ unittest.mock.create_autospec() và theo dõi cách các đối số từ khóa của nó đi đến configure_mock() cũng như cách cơ chế áp dụng spec_set hoạt động. Tái hiện ví dụ trong issue, sau đó xác minh rằng các kwargs như banana được áp dụng trước khi spec_set từ chối các thuộc tính không xác định được thêm vào sau đó.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

stdlib type-feature
>>> a=create_autospec("foo", spec_set=True, banana=1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.8/unittest/mock.py", line 2607, in create_autospec
    mock = Klass(parent=_parent, _new_parent=_parent, _new_name=_new_name,
  File "/usr/lib/python3.8/unittest/mock.py", line 2006, in __init__
    _safe_super(MagicMixin, self).__init__(*args, **kw)
  File "/usr/lib/python3.8/unittest/mock.py", line 460, in __init__
    self.configure_mock(**kwargs)
  File "/usr/lib/python3.8/unittest/mock.py", line 629, in configure_mock
    setattr(obj, final, val)
  File "/usr/lib/python3.8/unittest/mock.py", line 744, in __setattr__
    raise AttributeError("Mock object has no attribute '%s'" % name)
AttributeError: Mock object has no attribute 'banana'

One reason to pass extra kwargs to create_autospec() like this is to set missing attributes (e.g. because you know that they get set dynamically later on). So, it would be nice to have those attributes set on the mock before spec_set comes into effect.

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.