gpt4 book ai didi

python - 在同一个python函数中模拟两个具有不同返回值的redis hget

转载 作者:行者123 更新时间:2023-12-01 03:40:57 24 4
gpt4 key购买 nike

我有一些这样的代码:

import redis

redis_db = redis.Redis(host=redis_host_ip, port=redis_port, password=redis_auth_password)

def mygroovyfunction():
var_a = redis_db.hget(user, 'something_a')
var_b = redis_db.hget(user, 'something_b')
if var_a == something_a:
return Response(json.dumps({}), status=200, mimetype='application/json')
if var_b == something_b:
return Response(json.dumps({}), status=400, mimetype='application/json')

然后在用于单元测试的tests.py 文件中,我有一些如下代码:

import unittest
from mock import MagicMock, Mock, patch

@patch('redis.StrictRedis.hget', return_value='some value')
class MyGroovyFunctionTests(unittest.TestCase):
def test_success(self, mock_redis_hget):
response = self.app.get('mygroovyfunction')
self.assertEqual(response.status_code, 200)

所以我遗漏了一些其他 flask 内容,因为它与这个问题无关。

我想知道是否可以模拟每个单独的 redis hget 的返回值。在我当前的代码中,模拟的返回值替换了 var_b,因此当测试用例运行时,它使 var_a 也具有相同的值,导致代码沿着路径走下去以返回 status_code 为 400 结尾。

做这种事情的正确方法是什么?

最佳答案

好的,我在这里找到了答案:Python mock multiple return values

这个问题的公认答案就是我正在寻找的,即使用 side_effect 并将其设为值列表,因此每个修补的 redis hget 将被赋予列表中的每个值。因此,对于我的示例,解决方案是这样做:

import unittest
from mock import MagicMock, Mock, patch

@patch('redis.StrictRedis.hget', side_effect=['something_a','something_b'])
class MyGroovyFunctionTests(unittest.TestCase):
def test_success(self, mock_redis_hget):
response = self.app.get('mygroovyfunction')
self.assertEqual(response.status_code, 200)

谢谢https://stackoverflow.com/users/100297/martijn-pieters寻找我一直在寻找的答案:)

关于python - 在同一个python函数中模拟两个具有不同返回值的redis hget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39645472/

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