gpt4 book ai didi

python - Python 2.7 中的模拟 bool __bool__ 协议(protocol)方法

转载 作者:太空狗 更新时间:2023-10-30 01:32:19 27 4
gpt4 key购买 nike

作为单元测试的一部分,我正在使用出色的 Requests 库测试一些响应。您可以使用此库做一些很酷的事情,即测试对 200 的响应。通过简单地调用 OK 状态代码:

r = requests.get("http://example.com")
if r:
# success code, do something...
else:
# error code, handle the error.

这在幕后的工作方式是请求更新 __bool__()根据状态码的类型返回响应的协议(protocol)方法。

我想做的是能够模拟 requests.get() 的响应对象足够好了,这样我不仅可以修补我有兴趣检查的方法/属性( status_codejson() )而且还能够返回 False每当我选择时。

以下对我不起作用,因为一旦我调用 r从上面的示例代码中,它返回 Mock 对象 <Mock id='2998569132'>计算结果为 True .

with mock.patch.object(requests, 'get', return_value=mock.MagicMock(
# False, # didn't work
# __bool__=mock.Mock(return_value=False), # throws AttributeError, might be Python2.7 problem
# ok=False, # works if I call if r.ok: instead, but it's not what I want
status_code=401,
json=mock.Mock(
return_value={
u'error': {
u'code': 401,
u'message':
u'Request had invalid authentication credentials.',
u'status': u'UNAUTHENTICATED'
}
}
)
)) as mock_account_get_failure:
# mock_account_get_failure.return_value = False # overwrites what I just mocked with json() and status_code

我认为答案可能在 Magic Mocking the protocol method's return value 中, 但阅读 here__bool__仅支持 Python 3.0。

最佳答案

在python2.7中,你应该模拟__nonzero__而不是__bool__

m = mock.MagicMock(__nonzero__=mock.Mock(return_value=False), status_code=400)
m.status_code # > 400
bool(m) # > 假

关于python - Python 2.7 中的模拟 bool __bool__ 协议(protocol)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43123336/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com