首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于编写单元测试以供应用的模拟红色

用于编写单元测试以供应用的模拟红色
EN

Stack Overflow用户
提问于 2020-12-31 10:50:36
回答 1查看 4.4K关注 0票数 3

我有一个烧瓶应用程序,在其中我使用“烧瓶缓存”与redis。我将一些值保存在缓存中,并检索它以进行处理。我必须为这件事写一封信。如何在烧瓶缓存配置中模拟redis实例并传递该服务器的主机。

我确实尝试过"fakeredis",但这并没有给我红色主机,我可以在烧瓶缓存和测试我的应用程序。

我如何编写这方面的单元测试用例?

代码语言:javascript
复制
def func_1():
    # some steps
    x = func2() # this is where the code for flask caching (redis) data retrieval is
    # process x

我必须测试func_1()

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-31 11:21:09

模拟对象库可用于为特定方法调用的Redis创建模拟实例,例如:

代码语言:javascript
复制
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)

如果需要对函数进行模拟,以便不实际调用该函数,并且在正在测试的函数中使用,则可以使用贴片装饰器,如下所示:

代码语言:javascript
复制
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()

这可以用来模拟您正在测试的函数中与烧瓶缓存相关的代码。

编辑

就你的情况而言,我相信你可能想做以下工作:

代码语言:javascript
复制
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"

注意:传递给patch()的路径必须是导入func2()的位置,而不是定义func2()的模块。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65519905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档