M3R*_*3RS 15 python pytest python-3.x pytest-mock
下面打印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"))
Run Code Online (Sandbox Code Playgroud)
Mas*_*inn 17
这里的问题是您实际上正在执行以下操作:
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
Run Code Online (Sandbox Code Playgroud)
通过导入“终端”符号本身,您已经缩短了任何模拟的可能性,它现在是本地引用,因此更新“远程”引用将对本地版本没有影响。这意味着您应该保留模块本身的句柄,以便在每次访问时解析相关符号:
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"))
Run Code Online (Sandbox Code Playgroud)
应该工作得更好。
对于使用此类导入的任何模块来说,这也是一个问题,它们需要修补使用点而不是定义点,因为当模拟运行时,用户模块可能已经拥有其副本。
请参阅文档了解更多详细信息。
归档时间: |
|
查看次数: |
30349 次 |
最近记录: |