問題タブ [python-mock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - さまざまなモック オブジェクトへの一連の呼び出しをアサートする
mock
Pythonライブラリを使用して、さまざまなモック オブジェクトへの特定の呼び出しシーケンスをアサートするにはどうすればよいですか?
たとえば、次のように主張します。
foo(spam, eggs)
;の呼び出し それからbar(beans, ham)
;の呼び出し それから- の呼び出し
foo(sausage)
。
foo
とのそれぞれにパッチを適用することができbar
、結果として得られるモック オブジェクトはそれぞれ、そのモックの呼び出しに関するアサーションを行うことができます。しかし、そのシーケンスについてアサーションを行うには、呼び出しのシーケンス全体にアクセスする必要があります。
はい、理想的には、結果の状態を検査し、事後にそれについてアサーションを行うだけで済みます。しかし、それは一部のシステムでは実現不可能であり、正しい状態の唯一の有効な説明は、「これらの呼び出しはこの特定の順序で行われた」ということです。
mock
さまざまなオブジェクトへの一連の呼び出しにアクセスし、呼び出しが正しい順序で期待どおりであったことをアサートするために、ライブラリのどの機能を使用できますか?
python - 関数をモックして例外を発生させ、except ブロックをテストする
別の関数 ( foo
) を呼び出す関数 ( ) がありますbar
。呼び出しでbar()
が発生したHttpError
場合、ステータス コードが 404 の場合は特別に処理し、それ以外の場合は再発生させたいと考えています。
foo
への呼び出しをモックアウトして、この関数の周りにいくつかの単体テストを作成しようとしていますbar()
。残念ながら、ブロックbar()
によってキャッチされる例外を発生させるためのモック呼び出しを取得できません。except
これが私の問題を示す私のコードです:
インスタンスの をクラスに設定して、モックされた関数でエラーが発生するようにする必要があると言うMock docsに従いました。side_effect
Mock
Exception
他の関連する StackOverflow Q&A もいくつか調べましたが、彼らが引き起こしているのと同じことを行っているようで、モックによって例外が発生するようです。
を設定しても期待値が上がらないside_effect
のはなぜですか? 何か奇妙なことをしている場合、ブロック内のロジックをテストするにはどうすればよいですか?barMock
Exception
except
python - 単体テストで Python モッキングを使用する方法
Python のモッキングに関するほとんどのアドバイスは、単体テスト フレームワークの外部にある短いスニペットにまとめられています。これはうまくいきました。私はこのアドバイスに従おうとしていますが、適切な単体テストに埋め込むとすぐには成功しません。たとえば、最後のコメントで出力を生成する次のコード:
私はPyDevで実行して見ます:
単体テスト フレームワークを削除すると、このコードは正常に実行されます (ここでは、ファイル全体のtest.py部分のみ)。
実行すると、次のものが正常に生成されます。
単体テスト フレームワークでこれを動作させるには、さらに何をする必要がありますか?
python - Pythonモックの副作用として戻るか壊れますか?
「while True」ループで実行されているワーカーを持つマルチプロセッシング アプリケーションがあります。テストのために、次のような方法で sys.exit() をモックできるようにしたいと思います。
また
そのため、ループから抜け出し、テストを完了することができます。これらはどちらも機能しませんが、私が達成しようとしていることを行う別の方法はありますか?
python - 動的属性を持つ isinstance チェックで使用されるモック クラス
一部のクラスは、クラス レベル (外部__init__
またはその他の関数) で属性 (別名フィールド) を定義します。一部のクラスは、それらを__init__
関数内で定義するか、他の関数から定義します。一部のクラスでは、両方のアプローチを使用します。
問題は、を使用すると、クラスのインスタンスを渡す場合dir
にのみ含まれることです。'bar'
(一番右にスクロールして差分を表示します)
インスタンス化を避ける必要がある状況がありますが、単体テストの呼び出しで (チェックを渡すためMyClass
の) 設定として使用したいと考えています。spec
isinstance
mock.patch
これを行うと、次の原因になります。
AttributeError: モック オブジェクトに属性 'bar' がありません
モック ドキュメントに次のように記載されているため、これは理にかなっています。
spec: これは、文字列のリストまたはモック オブジェクトの仕様として機能する既存のオブジェクト (クラスまたはインスタンス) のいずれかです。オブジェクトを渡すと、オブジェクトで dir を呼び出すことによって文字列のリストが形成されます (サポートされていないマジック属性とメソッドを除く)。このリストにない属性にアクセスすると、AttributeError が発生します。
インスタンス化してもMyClass
、別のエラーが発生します。
原因:
TypeError: 'NonCallableMagicMock' オブジェクトは呼び出し可能ではありません
アクセスを許可する関数/属性に厳密であることはあまり気にしません。私は実際には、 なしで何かを呼び出すことができる通常の MagicMock の動作が必要ですAttributeError
。チェックに合格するためspec
に使用しているだけでも、使用するとこれが厳密になるようです。spec
isinstance
質問:
isinstance
チェックで使用され、クラスレベルで定義されていない属性を持つこのクラスを適切にモックするにはどうすればよいですか?
python - Pythonのモックを使用してdictからオブジェクトを一時的に削除する
値をチェックするコードのテストを書いていますos.environ
(これが最適ではないことはわかっていますが、それを使用する必要があります)。テスト中に os.environ からエントリを削除したいと思います。モックがこれをサポートしているかどうかはわかりません。patch.dict
アイテムの変更に使用できることはわかっていますが、キーと値のペアを削除したいです。私はこれらの線に沿って何かをしたい:
そのような偉業を実行する方法はありますか?