ホームページ  >  記事  >  バックエンド開発  >  コンテキストマネージャーで使用されるオブジェクトをunittest.mockでモックする方法は?

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

DDD
DDDオリジナル
2024-10-20 16:27:29461ブラウズ

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

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