我试图模拟从重命名的库中导入的函数。
示例
mylibrarywithlongname:
def helloworld():
return "hello world"
def helloworld_helper():
return helloworld()
主程序:
import mylibrarywithlongname as ml
from mock import MagicMock
def test():
ml.helloworld = MagicMock(return_value="oops")
print(ml.helloworld_helper())
print(ml.helloworld_helper())
test()
print(ml.helloworld_helper())
返回
hello world
oops
oops
我试图找到只在测试中模拟的语法 无需复制功能并手动恢复。
第三行应该返回原来的" hello world"
对于这个例子,我使用python 2.7(因为我试图模拟一个旧项目)
我的尝试:
from mock import MagicMock, patch
@patch(ml.helloworld, MagicMock(return_value="oops"))
def test():
print(ml.helloworld_helper())
失败并显示错误
AttributeError: 'function' object has no attribute 'rsplit'
答案 0 :(得分:0)
回答我自己的问题:我需要修补原始导入名称才能正常工作。
import mylibrarywithlongname as ml
from mock import patch
def test():
with patch('mylibrarywithlongname.helloworld') as mp:
ml.helloworld.return_value = "oops"
print(ml.helloworld_helper())
print(ml.helloworld_helper())
test()
print(ml.helloworld_helper())