我正在尝试为我的 Flask 应用程序修补一个公共(public)方法,但它似乎不起作用。
这是我在 mrss.feed_burner
中的代码
def get_feed(env=os.environ):
return 'something'
这就是我使用它的方式
@app.route("/feed")
def feed():
mrss_feed = get_feed(env=os.environ)
response = make_response(mrss_feed)
response.headers["Content-Type"] = "application/xml"
return response
这是我的测试,它没有解析。
def test_feed(self):
with patch('mrss.feed_burner.get_feed', new=lambda: '<xml></xml>'):
response = self.app.get('/feed')
self.assertEquals('<xml></xml>', response.data)
最佳答案
我认为您的问题是您没有在正确的命名空间中打补丁。参见 where_to_patch unittest.mock.patch
的文档。
本质上,您正在修补 mrss.feed_burner
中 get_feed()
的定义,但是您的 View 处理程序 feed()
已经有一个引用原始 mrss.feed_burner.get_feed()
。要解决此问题,您需要修补 View 文件中的引用。
根据您在 View 函数中对 get_feed
的使用,我假设您正在像这样导入 get_feed
查看文件.py
from mrss.feed_burner import get_feed
如果是这样,您应该像这样修补 view_file.get_feed
:
def test_feed(self):
with patch('view_file.get_feed', new=lambda: '<xml></xml>'):
...
关于对于公共(public)方法,Python 模拟补丁无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30987973/