コンテキストマネージャーで使用されるオブジェクトをunittest.mockでモックする方法は?

DDD
リリース: 2024-10-20 16:27:29
オリジナル
458 人が閲覧しました

How to Mock Objects Used in Context Managers with unittest.mock?

unittest.mock を使用してコンテキスト マネージャーで使用されるオブジェクトをモックする方法

with ステートメントを使用するコードをテストする場合、次のことが可能です。基礎となるオブジェクトをモックすることに挑戦しています。次の例を考えてみましょう:

def testme(filepath):
    with open(filepath) as f:
        return f.read()
ログイン後にコピー

unittest.mock を使用してこの関数をテストするには、open 関数をモックする必要があります。方法は次のとおりです:

Python 3:

  1. builtins.open にパッチを適用し、unittest.mock のモックオープンを使用します。
  2. コンテキストとしてパッチを使用します。マネージャーまたは装飾者。どちらの場合も、mock_open に必要な読み取りデータを渡し、モックされたファイルが予期された引数で呼び出されることを確認します。

Python 2:

  1. builtins.open の代わりに __builtin__.open をパッチします。
  2. コンテキスト マネージャーとしてモックを使用し、以前と同様にモックオープンを渡します。

例:

<code class="python">from unittest.mock import patch, mock_open

@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 3 では、patch はモックされたオブジェクトを引数としてテスト関数に渡しますが、Python 2 ではモックされたファイルを明示的にアサートする必要があることを覚えておいてください。

以上がコンテキストマネージャーで使用されるオブジェクトをunittest.mockでモックする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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