对于公共方法

时间:2015-06-22 19:12:17

标签: python unit-testing flask mocking magicmock

我试图为我的烧瓶应用程序修补一个公共方法,但它似乎不起作用。

这是我在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)

1 个答案:

答案 0 :(得分:16)

我相信你的问题是你没有在正确的命名空间中修补。请参阅unittest.mock.patch的{​​{3}}文档。

基本上,您在get_feed()修补了mrss.feed_burner的定义,但您的视图处理程序feed()已经引用了原始mrss.feed_burner.get_feed()。要解决此问题,您需要在视图文件中修补引用。

根据您在视图功能中对get_feed的使用情况,我假设您正在重新导入get_feed

view_file.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>'):
        ...