我有一个使用 MonkeyPatch 来测试某些功能的测试库。我想向这个库添加一个测试,以测试对我的端点的请求是否调用了 functionB()。
我使用 Mock() 库来创建模拟函数,然后我使用 MonkeyPatch.setattr() 传递它。但是,模拟函数永远不会被调用并且断言总是失败。我究竟做错了什么?
mock_function_B = Mock()
monkeypatch.setattr(file, 'function_B', mock_function_B)
params = json.dumps({'foo': "bar"})
res = client.post('/some_endpoint', headers=content_type_json, data=params)
assert res.status_code == 201
assert mock_function_B.call_count == 1
我希望 call_count 为 1,因为我知道 some_endpoint 调用 function_B(并且从日志中,我看到它已被调用)但是,断言失败,因为 call_count 为 0。
最佳答案
它可以通过不同的方式完成,例如,您可以模拟 function_B 并计算局部变量中的调用。
calls = []
monkeypatch.setattr(file, 'function_B', lambda a*, **k: calls.append('Called!'))
params = json.dumps({'foo': "bar"})
res = client.post('/some_endpoint', headers=content_type_json, data=params)
assert res.status_code == 201
assert len(calls) == 1
关于python - 如何使用 Python MonkeyPatch + Mock 来断言调用了一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57066546/