python - 如何使用 Python MonkeyPatch + Mock 来断言调用了一个函数

标签 python mocking pytest monkeypatching

我有一个使用 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/

相关文章:

python - 如何在 Python 中解码 Firebase JWT token

pytest - 如何使用 PUDB 在 Tox 中调试我的 python 单元测试?

java - 使可靠的 Web 服务变得不可靠,但以可控的方式?

java - 如果测试运行正常,为什么我会收到反射异常 NoSuchMethodException

ruby - minitest - 模拟 - 期望关键字参数

pytest 以编程方式更改 pytest.ini 默认值

python - 使用 mock.patch 给我 AttributeError ("<module ' 包 1'' > 没有属性 'myfunc' “?

python - 捕获 matplotlib 警告

python - 如何检查数字是否为 np.float64 或 np.float32 或 np.float16?

python - 如何避免高CPU使用率?