ホームページ  >  記事  >  バックエンド開発  >  単体テスト フレームワークを使用して、Python で開いているファイルをステートメントでモックする方法

単体テスト フレームワークを使用して、Python で開いているファイルをステートメントでモックする方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-20 16:23:29532ブラウズ

How to Mock Open Files in Python's With Statements Using the Unit Test Framework?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。