モックを使用してコンテキストマネージャの機能にパッチを適用しようとしています。ここにはwith
という文が入ったテストコードがあります。パッチは自分のコードの正しい場所で実行されます。コンテキストマネージャ用のモックがAttributeErrorで失敗しました:__exit__
@patch("__main__.opened_w_error")
def test_get_recipe_file(self, mo):
mo.return_value = (Mock(), None)
mo.__enter__ = Mock(return_value=None)
mo.__exit__ = Mock(return_value=None)
with mo(…) as (fd, err): # AttributeError: __exit__ is raised here.
print(fd)
print(err)
しかしwith mo(…) as (fd, err)
はAttributeError: __exit__
を発生させます。
documentation for mocking magic methods状態あなたは、コードの後半部分は、私はモックしようとしているものです
with mo as (fd, err):
…
としてそれを使用する必要があります。 しかし、それは私のコードでどのように使用されていません。本当に興味のある方は、ファイルを開けたり、エラーをキャッチしたりするexample 6 opened_w_error()
in PEP 343を盗もうとしています。したがってコードは次のとおりです。
with open_w_error(filename, 'r') as (fd, err):
…
後者は私が模倣しようとしているものです。オブジェクトあなたが文でに渡す
@TimFuchs:おっと、質問に編集します。ありがとうございました。 – Sardathrion