1

質問

URL を呼び出して、その URL の応答を変更する関数があります。その URL に依存することなく、応答を変更する関数のコードの部分の単体テストを作成するにはどうすればよいですか?

my_module.py

import requests

def get_some_resource():
    url = 'http://httpbin.org/get'
    r = requests.get(url)
    # Special manipulation of returned text (what I want to test) simple example used
    output = r.text.upper()
    return output

これまでに試したこと

  • モックの MagicMock() の使用 (私が知る限り、これを使用して関数の変数をオーバーライドすることはできません)
  • その関数の 2 つのセクション (URL の取得と応答の変更) を分割することを検討しましたが、それが必要かどうかはわかりません。
  • ググりすぎて手が痛い
4

1 に答える 1

1

これが単体テストの場合は、おそらくrequestsライブラリをモックアウトしたいと思うでしょう。patch全体だけでも、ただでgetもかまいませんが、それほど重要ではありません。

次のようになります。

get = mock.Mock()
text = get.return_value.text = "hey I got this")
with mock.patch("my_module.requests.get", get):
    resource = get_some_resource()
self.assertEqual(resource, text.upper())

乾杯。

于 2012-07-23T23:56:49.223 に答える