Python モックパッチはパブリックメソッドでは期待どおりに動作しません 質問する

Python モックパッチはパブリックメソッドでは期待どおりに動作しません 質問する

Flask アプリケーションのパブリック メソッドにパッチを適用しようとしていますが、うまくいかないようです。

私のコードは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

問題は、正しい名前空間にパッチを適用していないことだと思います。パッチを当てる場所のドキュメントunittest.mock.patch

本質的には、 の定義にパッチを適用していますget_feed()mrss.feed_burner、ビュー ハンドラーfeed()にはすでに元の への参照がありますmrss.feed_burner.get_feed()。この問題を解決するには、ビュー ファイル内の参照にパッチを適用する必要があります。

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

おすすめ記事