Python の単体テスト フレームワークの With ステートメント内でオープン ファイルをモックする
with ステートメント内でオープン ファイルを利用するコードをテストする場合、以下の必要性が生じます。正確な単体テストのために、これらの開いているファイルを模擬します。この記事では、Python の Mock フレームワークを使用してそのようなファイルをモックする方法について詳しく説明します。
Python バージョン 3
Mock フレームワークには、mock_open 関数が用意されており、これを組み合わせて使用できます。開いているファイルを模擬するパッチ コンテキスト マネージャーを使用します。コンテキスト マネージャーとして使用される patch 関数は、パッチされたオブジェクトを置き換えるオブジェクトを返します。
<code class="python">from unittest.mock import patch, mock_open with patch("builtins.open", mock_open(read_data="data")) as mock_file: assert open("path/to/open").read() == "data" mock_file.assert_called_with("path/to/open")</code>
また、patch 関数は、new_callable 引数を使用してデコレータとして使用することもできます。 patch で使用されない追加の引数は new_callable 関数に渡されることに注意してください:
<code class="python">@patch("builtins.open", new_callable=mock_open, read_data="data") def test_patch(mock_file): assert open("path/to/open").read() == "data" mock_file.assert_called_with("path/to/open")</code>
この場合、モックされたオブジェクトは引数として test 関数に渡されます。
Python バージョン 2
Python 2 の場合、builtins.open の代わりに __builtin__.open モジュールにパッチを適用する必要があり、モック フレームワークは pip 経由で個別にインストールする必要があります:
<code class="python">from mock import patch, mock_open with patch("__builtin__.open", mock_open(read_data="data")) as mock_file: assert open("path/to/open").read() == "data" mock_file.assert_called_with("path/to/open")</code>
これらの手法により、with ステートメント内で開いているファイルを効果的にモックすることができ、Python アプリケーションの包括的な単体テストが容易になります。
以上が単体テスト フレームワークを使用して、Python で開いているファイルをステートメントでモックする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。