応答を制御するためのリクエストのモック
Python では、モック パッケージは外部モジュールまたはクラスをモックする強力な方法を提供し、ユーザーが操作できるようにします。動作を確認し、インタラクションを検証します。 HTTP リクエストのコンテキストでは、Requests モジュールのモックは、外部サービスに依存するコードをテストする場合に特に役立ちます。
ステップ 1: Requests モジュールをモックする
Requests モジュールをモックする場合は、目的の応答を返すカスタム関数を get() 関数にパッチする必要があります。次のようなモック メソッドを定義できます。
<code class="python">def mocked_requests_get(url, **kwargs): if url == "aurl": return MockResponse("a response") elif url == "burl": return MockResponse("b response") else: raise Exception("URL not mocked")</code>
このメソッドは有効な URL を予期し、事前定義されたコンテンツを含むふりの応答を表す MockResponse オブジェクトを返すことに注意してください。
ステップ 2: 元のリクエスト モジュールにパッチを適用します
モック メソッドを定義したら、@mock.patch デコレータを使用して元の request.get() にパッチを適用できます。これにより、テストしているコード内の request.get() へのすべての呼び出しがモックされた動作に置き換えられます。
<code class="python">@mock.patch("requests.get", side_effect=mocked_requests_get) def test_myview(self, mock_get): # Your test goes here</code>
ステップ 3: ビューを呼び出して応答を確認する
これで、通常どおり関数を呼び出し、期待した応答が得られたことを確認できます。モック オブジェクトを検査すると、get() 関数が特定の引数で呼び出され、必要な値が返されたことを確認できます。
コード例:
<code class="python">import requests from unittest import mock class MyViewTest(unittest.TestCase): # ... def test_myview(self, mock_get): self.assertEqual(res1.text, "a response") self.assertEqual(res2.text, "b response") self.assertEqual(res3.text, "c response") # Verify mock calls mock_get.assert_called_with('aurl') mock_get.assert_called_with('burl') mock_get.assert_called_with('curl')</code>
覚えておいてください応答のテキスト内容と、モック メソッドに渡された呼び出し回数と引数の両方を確認します。これにより、予期したインタラクションが行われ、望ましい動作が達成されたことを確認できます。
以上がPython でリクエストモジュールのレスポンスをモックする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。