首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用pytest-mock指定模拟函数的返回值?

如何用pytest-mock指定模拟函数的返回值?
EN

Stack Overflow用户
提问于 2020-06-18 12:28:18
回答 2查看 16.2K关注 0票数 7

下面打印False。这难道不是嘲笑的方式吗?

我尝试将路径更改为函数,但它出错了,因此路径看起来是正确的。我遗漏了什么?

代码语言:javascript
复制
import pytest

from deals.services.services import is_user_valid


class TestApi:
    def test_api(self, mocker):
        mocker.patch('deals.services.services.is_user_valid', return_value=True)
        print(is_user_valid("sdfds", "sdfsdf"))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-18 12:38:03

这里的问题是,您实际上是在做以下工作:

代码语言:javascript
复制
from deals.services.services import is_user_valid
import deals.services.services
deals.services.services.is_user_valid = Mock(return_value=True)
# call local is_user_valid

通过导入“终端”符号本身,您已经减少了任何模仿的可能性,它现在是一个本地引用,因此更新“远程”引用对本地版本没有任何影响。这意味着您应该对模块本身保留一个句柄,以便在每次访问时解析相关的符号:

代码语言:javascript
复制
from deals.services import services

def test_api(mocker):
    mocker.patch('deals.services.services.is_user_valid', return_value=True)
    print(services.is_user_valid("sdfds", "sdfsdf"))

应该工作得更好。

--这也是任何使用这种导入的模块的问题,它们需要修补使用点,而不是定义点,因为到模拟运行的时候,用户模块已经有了它们的副本。

有关更多细节,请参见文献资料

票数 8
EN

Stack Overflow用户

发布于 2020-06-18 13:28:50

我的实际问题比上面的最小版本要复杂得多。模拟函数在另一个文件中使用。

有帮助的是在导入/使用函数的地方进行修补,而不是在定义函数的地方进行修补。因此,向mocker.patch 提供导入函数的文件的路径.

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

https://stackoverflow.com/questions/62449983

复制
相关文章

相似问题

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