Python でモックを使用して「with」ステートメントの「open」ハンドルをモックする方法

Patricia Arquette
リリース: 2024-10-20 16:24:02
オリジナル
686 人が閲覧しました

How to Mock the

Python でモックを使用して With ステートメントのオープン ハンドルをモックする

with ステートメントとファイル操作を利用するコードの単体テストを作成する場合、テストされたコードの動作を分離するには、開いているハンドルをモックすることが必要になります。 Python の Mock フレームワークを使用してこれを実現する方法は次のとおりです。

Python 3

unittest.mock モジュールを使用すると、open などの組み込み関数にパッチを適用できます。その方法は次のとおりです。

<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>
ログイン後にコピー

Python 2

Python 2 では、構文が若干異なります。 builtins.open にパッチを適用する代わりに、__builtin__.open にパッチを適用し、モックを個別にインポートする必要があります。

<code class="python">import mock

with mock.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>
ログイン後にコピー

Decorator によるパッチ

パッチを使用することもできます。よりクリーンな構文のためのデコレータ。ただし、mock_open の結果を patch の new= 引数で直接使用するのは難しい場合があります。代わりに、ドキュメントで説明されているように 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>
ログイン後にコピー

注: この場合、パッチ適用されたオブジェクトが引数としてテストに渡されることに注意してください。関数。

以上がPython でモックを使用して「with」ステートメントの「open」ハンドルをモックする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!