问题描述
我正在尝试创建对具有属性status_code
的POST方法的库(吊床)调用的模拟。
这是我的测试代码:
def test_send_text(self):
Hammock.POST = Mock(status_code=201)
print Hammock.POST.status_code
self.task.payload = fixtures.text_payload
self.task.send_text()
# ········
Hammock.POST.assert_any_call()
当我打印Hammock.POST.status_code
,得到的结果是201。但是,当我们进入要测试的代码时:
response = self.twilio_api('Messages.json').POST(data=self.payload)
print '*' * 10
print response
print response.status_code
if response.status_code == 201:
self.logger.info('Text message successfully sent.')
else:
raise NotificationDispatchError('Twilio request failed. {}. {}'.format(response.status_code,
response.content))
事情变得怪异。
实际上,响应是一个Mock对象。
但是response.status_code并不是对象,就像我在测试中尝试的那样是201,而是一个对象: <Mock name='mock().status_code' id='4374061968'>
。
为什么我的嘲笑属性在测试代码中而不是在我正在测试的代码中起作用?
1楼
问题是POST()。status_code与POST.status_code。 POST.status_code的确为== 201,但是POST()的返回对象是一个全新的模拟对象。
您正在寻找的大致是
Hammock.POST = Mock()
Hammock.POST.return_value = Mock(status_code=201)