Bạn đang cố gắng thay thế hàm lồng nhau bằng đối tượng giả? Nếu vậy, điều đó khá đơn giản, cho dù chức năng phức tạp thế nào đi chăng nữa. Bạn có thể sử dụng MagicMock để thay thế khá nhiều đối tượng python bất kỳ.
Nếu bạn cần mô phỏng hàm trả về thứ gì đó, bạn chỉ có thể đặt tham số return_value
của MagicMock
. Nó sẽ giống như thế này:
>>> super_nested_mock = mock.MagicMock()
>>> super_nested_mock.return_value = 42
>>> super_nested_mock()
42
Tuy nhiên, nếu bạn đang cố gắng để kiểm tra một đoạn mã mà các cuộc gọi chức năng super_nested
của bạn ở đâu đó bên trong, và muốn thử nó ra, bạn sẽ cần phải sử dụng một patch . Trong thư viện giả, nó sẽ giống như thế này:
with patch('super_nested') as super_nested_mock:
super_nested_mock.return_value = "A good value to test with"
assert my_function_that_calls_super_nested(5) == 20
Ở đây, bất cứ điều gì trong khối with
mà thông thường sẽ gọi super_nested
thay vào đó sẽ gọi super_nested_mock
và chỉ trả về giá trị mà bạn thiết lập để nó.
Có một số sự tinh tế đối với chính xác những gì bạn cần đặt trong cuộc gọi bản vá. Chủ yếu, bạn muốn vá các đối tượng như mô-đun bạn đang thử nghiệm sẽ nhìn thấy nó. Xem "where to patch" để biết thêm hướng dẫn.
Điều này sẽ không hoạt động vì hàm lồng nhau chỉ tồn tại trong hàm tôi muốn kiểm tra. Vì vậy, 'patch' không thể định vị và thay thế nó trực tiếp. – satoru
Tôi hiểu, tôi đoán tôi đã hiểu lầm chính xác bạn đang cố kiểm tra cái gì. Tôi sẽ để nó ở đây vì mục đích của hậu thế. Chúc may mắn. – Wilduck