gpt4 book ai didi

python - 为应用程序编写单元测试的模拟 redis

转载 作者:行者123 更新时间:2023-12-04 16:45:30 24 4
gpt4 key购买 nike

我有一个 flask 应用程序,我在其中使用带有 redis 的“flask-caching”。我在缓存中保存了一些值并检索它进行处理。我必须为此编写单元测试。我如何模拟 redis 实例并在 flask 缓存配置中传递该服务器的主机。

我确实尝试过“fakeredis”,但这并没有给我 redis 主机,我可以在 flask 缓存中使用它并测试我的应用程序。

我怎样才能为此编写单元测试用例?

def func_1():
# some steps
x = func2() # this is where the code for flask caching (redis) data retrieval is
# process x

我必须测试 func_1()

最佳答案

mock object library可用于创建 Mock returns a value 的 Redis 实例对于特定的方法调用,例如:

from unittest.mock import Mock

def test_redis():
mock_redis = Mock()
mock_redis.get.return_value = "2020-12-31T00:00:00".encode()

function_to_test(mock_redis)

如果一个函数需要被模拟,这样函数就不会被实际调用,而是在被测试的函数内部使用,patch decorator可以使用,如下所示:

from unittest.mock import patch

@patch("package.module.function_to_mock")
def test_redis(mock_function_to_mock):
mock_function_to_mock.get.return_value = "2020-12-31T00:00:00".encode()

function_to_test()

这可用于模拟您正在测试的函数内的 flask 缓存相关代码。


编辑

对于您的情况,我相信您可能希望执行以下操作:

from unittest.mock import patch

@patch("package.module.func2")
def test_func_1(mock_func2):
mock_func2.return_value = "Test value"

func_1()

mock_func2.assert_called_once()

在这里func2()被 mock ,它的返回值设置为 "Test value" , 所以当它在 func_1() 内部调用时变量 x等于 "Test value"

Note: the path passed to patch() must be to where func2() is imported, and not to the module where func2() is defined.

关于python - 为应用程序编写单元测试的模拟 redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65519905/

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