問題タブ [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.

0 投票する
2 に答える
348 参照

python - さまざまなモック オブジェクトへの一連の呼び出しをアサートする

mockPythonライブラリを使用して、さまざまなモック オブジェクトへの特定の呼び出しシーケンスをアサートするにはどうすればよいですか?

たとえば、次のように主張します。

  • foo(spam, eggs);の呼び出し それから
  • bar(beans, ham);の呼び出し それから
  • の呼び出しfoo(sausage)

fooとのそれぞれにパッチを適用することができbar、結果として得られるモック オブジェクトはそれぞれ、そのモックの呼び出しに関するアサーションを行うことができます。しかし、そのシーケンスについてアサーションを行うには、呼び出しのシーケンス全体にアクセスする必要があります。

はい、理想的には、結果の状態を検査し、事後にそれについてアサーションを行うだけで済みます。しかし、それは一部のシステムでは実現不可能であり、正しい状態の唯一の有効な説明は、「これらの呼び出しはこの特定の順序で行われた」ということです。

mockさまざまなオブジェクトへの一連の呼び出しにアクセスし、呼び出しが正しい順序で期待どおりであったことをアサートするために、ライブラリのどの機能を使用できますか?

0 投票する
1 に答える
150250 参照

python - 関数をモックして例外を発生させ、except ブロックをテストする

別の関数 ( foo) を呼び出す関数 ( ) がありますbar。呼び出しでbar()が発生したHttpError場合、ステータス コードが 404 の場合は特別に処理し、それ以外の場合は再発生させたいと考えています。

fooへの呼び出しをモックアウトして、この関数の周りにいくつかの単体テストを作成しようとしていますbar()。残念ながら、ブロックbar()によってキャッチされる例外を発生させるためのモック呼び出しを取得できません。except

これが私の問題を示す私のコードです:

インスタンスの をクラスに設定して、モックされた関数でエラーが発生するようにする必要があると言うMock docsに従いました。side_effectMockException

他の関連する StackOverflow Q&A もいくつか調べましたが、彼らが引き起こしているのと同じことを行っているようで、モックによって例外が発生するようです。

を設定しても期待値が上がらないside_effectのはなぜですか? 何か奇妙なことをしている場合、ブロック内のロジックをテストするにはどうすればよいですか?barMockExceptionexcept

0 投票する
1 に答える
547 参照

python - 単体テストで Python モッキングを使用する方法

Python のモッキングに関するほとんどのアドバイスは、単体テスト フレームワークの外部にある短いスニペットにまとめられています。これはうまくいきました。私はこのアドバイスに従おうとしていますが、適切な単体テストに埋め込むとすぐには成功しません。たとえば、最後のコメントで出力を生成する次のコード:

私はPyDevで実行して見ます:

単体テスト フレームワークを削除すると、このコードは正常に実行されます (ここでは、ファイル全体のtest.py部分のみ)。

実行すると、次のものが正常に生成されます。

単体テスト フレームワークでこれを動作させるには、さらに何をする必要がありますか?

0 投票する
1 に答える
3603 参照

python - Pythonモックの副作用として戻るか壊れますか?

「while True」ループで実行されているワーカーを持つマルチプロセッシング アプリケーションがあります。テストのために、次のような方法で sys.exit() をモックできるようにしたいと思います。

また

そのため、ループから抜け出し、テストを完了することができます。これらはどちらも機能しませんが、私が達成しようとしていることを行う別の方法はありますか?

0 投票する
1 に答える
2436 参照

python - 動的属性を持つ isinstance チェックで使用されるモック クラス

一部のクラスは、クラス レベル (外部__init__またはその他の関数) で属性 (別名フィールド) を定義します。一部のクラスは、それらを__init__関数内で定義するか、他の関数から定義します。一部のクラスでは、両方のアプローチを使用します。

問題は、を使用すると、クラスのインスタンスを渡す場合dirにのみ含まれることです。'bar'

(一番右にスクロールして差分を表示します)

インスタンス化を避ける必要がある状況がありますが、単体テストの呼び出しで (チェックを渡すためMyClassの) 設定として使用したいと考えています。specisinstancemock.patch

これを行うと、次の原因になります。

AttributeError: モック オブジェクトに属性 'bar' がありません

モック ドキュメントに次のように記載されているため、これは理にかなっています。

spec: これは、文字列のリストまたはモック オブジェクトの仕様として機能する既存のオブジェクト (クラスまたはインスタンス) のいずれかです。オブジェクトを渡すと、オブジェクトで dir を呼び出すことによって文字列のリストが形成されます (サポートされていないマジック属性とメソッドを除く)。このリストにない属性にアクセスすると、AttributeError が発生します。

インスタンス化してもMyClass、別のエラーが発生します。

原因:

TypeError: 'NonCallableMagicMock' オブジェクトは呼び出し可能ではありません

アクセスを許可する関数/属性に厳密であることはあまり気にしません。私は実際には、 なしで何かを呼び出すことができる通常の MagicMock の動作が必要ですAttributeError。チェックに合格するためspecに使用しているだけでも、使用するとこれが厳密になるようです。specisinstance

質問:

isinstanceチェックで使用され、クラスレベルで定義されていない属性を持つこのクラスを適切にモックするにはどうすればよいですか?

0 投票する
2 に答える
3982 参照

python - Pythonのモックを使用してdictからオブジェクトを一時的に削除する

値をチェックするコードのテストを書いていますos.environ(これが最適ではないことはわかっていますが、それを使用する必要があります)。テスト中に os.environ からエントリを削除したいと思います。モックがこれをサポートしているかどうかはわかりません。patch.dictアイテムの変更に使用できることはわかっていますが、キーと値のペアを削除したいです。私はこれらの線に沿って何かをしたい:

そのような偉業を実行する方法はありますか?