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)
4

1 に答える 1

35

あなたの問題は、正しい名前空間にパッチを当てていないことだと思います。については、 where_to_patchのドキュメントを参照してくださいunittest.mock.patch

get_feed()基本的に、 inの定義にパッチを適用して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>'):
        ...
于 2015-06-23T00:41:48.357 に答える