問題タブ [python-unittest.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 - 相互に依存する一連の呼び出しをモックする
Web ページをスクレイピングしてデータをファイルに保存する方法があります (コード例については以下を参照してください)。結果のデータが整形式であることをテストする必要があります。
問題は、データが一連の呼び出しから受信され、その後の呼び出しで前の呼び出しの結果が使用されることです。さらに悪いことに、関連する呼び出しの多くは、同じオブジェクト ( a Webdriver
、 a 、WebDriverWait
およびexpected_conditions
モジュール) に対して異なる引数で行われます。
私はそれを見るunittest.mock.Mock
単純な呼び出しまたは一連の単純な呼び出しの結果をモックすることはできますが、このように絡み合ったものを実装する方法がわかりません。私が見る唯一の方法は、メソッドが行うすべての呼び出しを手動で再実装し、メソッドで渡す引数をそれらの実装にコピーして、呼び出しごとに何を返すかを知ることです。そして、他のすべてのテスト ケースに対してこれを繰り返します。これは、書いて維持するのは絶対的な悪夢のように思えます: テスト自体よりも数倍多くのコードがあり、コードとほぼ 1:1 の重複があります。だから私は、誰かがもっと良い方法があると言うか、何もないことを証明し、誰もが本当にこのようにしていることを証明するまで先に進むことを拒否し (私は信じていません)、たとえば、ページのラベルが変更されるたびにすべてのテストを書き直します (これは実装の詳細であるため、通常はそうすべきです」
サンプルコード ( http://example.comに適応):
python - Python モックの「ネストされた」コンストラクター呼び出し
「手続き型」関数によって呼び出されるオブジェクトメソッドでコンストラクターの呼び出しをモックするのに苦労しています。
理解を深めるために、短いバージョンとしての私のコードを次に示します。
ファイル ./src/b/lambda_function.py:
ファイル ./src/b/oee_retriever.py:
今、関数をテストしたいだけで、コンストラクター呼び出しをモックしたいlambda_function.handler()
OeeRepo()
oee_retriever.__init__()
私は試した:
モックされた結果は「いいえ」になるはずですが、oee_repo.do()
代わりに実際の関数が呼び出されます。私も使用しようとしまし@patch('src.b.oee_retriever.OeeRepo')
たがoee_repo.do()
、この場合も呼び出されました。
OeeRepo()
コンストラクター呼び出しをモックするにはどうすればよいですか?