Một ví dụ tối thiểu sử dụng unittest.mock.Mock
từ thư viện tiêu chuẩn:
from unittest.mock import Mock
def example():
pass
example_mock = Mock(side_effect=example)
example_mock()
#Pseudocode:
if example_mock.called:
print("foo bar")
Đầu ra bảng điều khiển sau khi chạy tập lệnh:
foo bar
Cách tiếp cận này rất hay vì nó không yêu cầu bạn phải sửa đổi example
chính chức năng, điều này rất hữu ích nếu bạn muốn thực hiện kiểm tra này trong một số mã kiểm tra đơn vị, mà không cần sửa đổi chính mã nguồn (EG để lưu trữ một has_been_called
thuộc tính hoặc bọc chức năng trong trình trang trí).
Giải trình
Như được mô tả trong tài liệu cho unittest.mock.Mock
lớp , side_effect
đối số đối với phương thức Mock()
khởi tạo chỉ định "một hàm được gọi bất cứ khi nào Mock được gọi".
Các Mock.called
quy định cụ thể thuộc tính "một boolean đại diện hay không đối tượng giả đã được gọi là".
Các Mock
lớp có các thuộc tính khác mà bạn có thể tìm thấy hữu ích, EG:
call_count
: Một số nguyên cho bạn biết đối tượng giả đã được gọi bao nhiêu lần
call_args
: Đây là Không có (nếu mô hình chưa được gọi) hoặc các đối số mà mô hình được gọi lần cuối cùng
call_args_list
: Đây là danh sách tất cả các lệnh gọi đến đối tượng giả lập theo thứ tự (vì vậy độ dài của danh sách là số lần nó đã được gọi). Trước khi bất kỳ cuộc gọi nào được thực hiện, nó là một danh sách trống
Các Mock
lớp cũng có phương pháp thuận tiện cho việc lập báo cáo khẳng định dựa trên bao nhiêu lần một Mock
đối tượng được gọi, và những gì lẽ nó được gọi với, EG:
assert_called_once_with(*args, **kwargs)
: Khẳng định rằng mô hình đã được gọi chính xác một lần và lệnh gọi đó là với các đối số được chỉ định