gpt4 book ai didi

python - 如何修补 Flask View 调用的函数

转载 作者:行者123 更新时间:2023-11-28 16:33:50 25 4
gpt4 key购买 nike

我的 webapp 想要使用 boto 向 AWS SQS 发送消息,我想模拟发送实际消息并只检查调用 send_message 是否被调用。但是我不明白如何使用 python mock 来修补被测试函数调用的函数。

我怎样才能像下面的伪类代码那样模拟出 boto con.send_message?

views.py:

@app.route('/test')
def send_msg():
con = boto.sqs.connect_to_region("eu-west-1",aws_access_key_id="asd",aws_secret_access_key="asd")
que = con.get_queue('my_queue')
msg = json.dumps({'data':'asd'})
r=con.send_message(que, msg)

测试.py

class MyTestCase(unittest.TestCase):
def test_test(self):
with patch('views.con.send_message') as sqs_send:
self.test_client.get('/test')
assert(sqs_send.called)

最佳答案

要进行此类测试,您需要补丁 connect_to_region()。修补此方法后,返回一个 MagicMock() 对象,您可以使用它来测试所有函数行为。

你的测试用例可以是这样的:

class MyTestCase(unittest.TestCase):
@patch("boto.sqs.connect_to_region", autospec=True)
def test_test(self, mock_connect_to_region):
#grab the mocked connection returned by patched connect_to_region
mock_con = mock_connect_to_region.return_value
#call client
self.test_client.get('/test')
#test connect_to_region call
mock_connect_to_region.assert_called_with("eu-west-1",aws_access_key_id="asd",aws_secret_access_key="asd")
#test get_queue()
mock_con.get_queue.assert_called_with('my_queue')
#finaly test send_message
mock_con.send_message.assert_called_with(mock_con.get_queue.return_value, json.dumps({'data':'asd'}))

一些注意事项:

  1. 我以白框的风格编写它并检查你 View 的所有调用:你可以做得更松散并省略一些检查;如果您只想检查调用,请使用 self.assertTrue(mock_con.send_message.called),如果您对某些参数内容不感兴趣,请使用 mock.ANY 作为参数。
  2. autospec=True 不是强制性的但非常有用:看看 autospeccing .
  3. 如果代码包含某些错误,我深表歉意...我现在无法对其进行测试,但我希望这个想法足够清晰。

关于python - 如何修补 Flask View 调用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29100625/

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