ホームページ  >  記事  >  バックエンド開発  >  Python Unittest.Mock で開いているファイルをモックする方法

Python Unittest.Mock で開いているファイルをモックする方法

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

How to Mock Open Files in Python Unittest.Mock?

Python で開いているファイルをモックする Unittest.Mock

ファイル操作を利用する Python コードをテストする場合、開いているファイルの動作を効果的にモックすることが不可欠です。次のコードに示すように、with ステートメント内で open が使用される場合、1 つの特定のシナリオが発生します。

<code class="python">def testme(filepath):
    with open(filepath) as f:
        return f.read()</code>

Python 3

この open 操作を模擬するには、次のコードを使用します。モックフレームワークの一部であるmock_openと組み合わせたunittest.mock。 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 をデコレータとして使用することもできます。ただし、mock_open() の結果を新しい引数として使用するのは面倒な場合があります。代わりに、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>

このインスタンスでは、patch はモックされたオブジェクトを引数としてテスト関数に提供することに注意してください。 .

Python 2

Python 2 の場合、代わりに __builtin__.open にパッチを適用し、モックを個別にインポートする必要があります:

<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>

以上がPython Unittest.Mock で開いているファイルをモックする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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