下面打印False。这难道不是嘲笑的方式吗?
我尝试将路径更改为函数,但它出错了,因此路径看起来是正确的。我遗漏了什么?
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"))发布于 2020-06-18 12:38:03
这里的问题是,您实际上是在做以下工作:
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通过导入“终端”符号本身,您已经减少了任何模仿的可能性,它现在是一个本地引用,因此更新“远程”引用对本地版本没有任何影响。这意味着您应该对模块本身保留一个句柄,以便在每次访问时解析相关的符号:
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"))应该工作得更好。
--这也是任何使用这种导入的模块的问题,它们需要修补使用点,而不是定义点,因为到模拟运行的时候,用户模块已经有了它们的副本。
有关更多细节,请参见文献资料。
发布于 2020-06-18 13:28:50
我的实际问题比上面的最小版本要复杂得多。模拟函数在另一个文件中使用。
有帮助的是在导入/使用函数的地方进行修补,而不是在定义函数的地方进行修补。因此,向mocker.patch 提供导入函数的文件的路径.
https://stackoverflow.com/questions/62449983
复制相似问题