用于为应用程序编写unittest的模拟redis

2024-06-01 00:59:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我确实尝试过“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()


Tags: 实例服务器redis应用程序flaskisdef测试用例
1条回答
网友
1楼 · 发布于 2024-06-01 00:59:09

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

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()是模拟的,它的返回值设置为"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.

相关问题 更多 >