这是我的项目结构
|-- project
|-- util.py
|-- main.py
|-- tests
|-- test_main.py
在
main.py
文件中,我引用了 util.py
中的函数
from util import rename
def use_rename():
after_rename = rename("name")
return after_rename
这就是我在
rename
中实现
util.py
函数的方法
def rename(name: str) -> str:
return name
最后我在
test_main.py
文件中测试它
import sys
import os
from unittest.mock import patch
sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
from main import use_rename
@patch("util.rename")
def test_use_rename(mock_rename):
mock_rename.return_value = "name2"
assert use_rename() == "name"
如您所见,我尝试模拟
rename
函数的返回结果并假设测试应该失败,但它总是成功。我的代码有问题吗?
您的代码中只有一个错误:您在定义函数的模块
rename
中模拟了函数util
,但您必须通过指令模拟在util
模块中导入的对象main.py
:
from util import rename
所以你只需要改变
test_main.py
:
import sys
import os
from unittest.mock import patch
sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
from main import use_rename
#@patch("util.rename") # <--- comment this decorator
@patch("main.rename") # <--- add this decorator
def test_use_rename(mock_rename):
mock_rename.return_value = "name2"
assert use_rename() == "name"
经过此更改,执行的输出为:
...
assert use_rename() == "name"
AssertionError