【问题标题】:Python mock patch doesn't work as expected for public method对于公共方法,Python 模拟补丁无法按预期工作
【发布时间】:2015-06-22 19:12:16
【问题描述】:

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

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

【问题讨论】:

    标签: python unit-testing flask mocking magicmock


    【解决方案1】:

    我相信您的问题是您没有在正确的命名空间中进行修补。有关unittest.mock.patch,请参阅where_to_patch 文档。

    本质上,您正在修补mrss.feed_burnerget_feed() 的定义,但您的视图处理程序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>'):
            ...
    

    【讨论】:

    • 天啊,找这个很久了...谢谢伙计!
    猜你喜欢
    • 2020-06-22
    • 2013-02-27
    • 2015-12-17
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多