テストですべてをock笑すると、いくつかの潜在的な落とし穴につながる可能性があり、テスト戦略の有効性と信頼性に悪影響を与える可能性があります。過剰なモッキングに関連する重要な問題のいくつかは次のとおりです。
1。脆性テストとタイトな結合**
すべての依存関係をモックすると、テストはテスト中のコードの実装の詳細としっかりと結合します。これは、外部動作が変更されていない場合でも、コードの内部ワーキングの小さな変更でさえテストを破ることができることを意味します。このようなテストは脆く、頻繁な更新が必要であり、時間がかかり、イライラする可能性があります[6] [9]。
2。偽りの自信と隠されたバグ**
過度のモッキングは、コードの信頼性に誤った信頼性につながる可能性があります。モックでコンポーネントを分離することにより、すべてのコンポーネントが相互作用した場合にのみ現れる実際の問題を見逃す可能性があります。これにより、テスト中ではなく生産中にバグが発見され、テストの目的が損なわれる可能性があります[1] [9]。
3。過剰な複雑さとメンテナンスの課題**
特に複雑なシステムのために、模擬の作成と維持は、挑戦的で時間がかかる可能性があります。システムが進化するにつれて、依存関係や動作の変化を反映するために模擬を頻繁に更新する必要がある場合があります。
4。実際の動作を確認するのが難しい**
すべてをock笑すると、実際のシナリオでシステムがどのように動作するかを確認することが難しくなります。模擬を含む統合テストは、この目的に適していることがよくあります。模擬への過度の依存は、実際の相互作用を正確に反映しないテストにつながる可能性があります[9] [11]。
5。リソースの非効率的な使用**
過度のモッキングは、リソースの非効率的な使用につながる可能性があります。モックの構成は、特にデータベースが多いまたは複雑なシステムで、実際のテストロジックを作成するよりも多くの時間を消費できます[2] [11]。この非効率性により、開発プロセスが遅くなり、テストコストが増加する可能性があります。
6。統合テストとオーバーラップ**
ユニットテストがモックなしの統合テストによってもテストされるシナリオをカバーする場合、これらの単体テストで追加された付加価値に関する疑問を提起します。統合テストは、多くの場合、広範なock笑を必要とせずにシステムの動作をより包括的なカバレッジを提供します[2] [7]。
7。誤った模擬動作の可能性**
モックが置換された実際のオブジェクトの動作を正確に模倣しない場合、実際のシステムが故障した場合でもテストが合格する可能性があります。これは、誤った安心感につながり、バグを逃した可能性があります[5] [9]。
要約すると、モッキングはテストに役立つツールになりますが、それを過剰に使用すると、脆性テスト、誤った自信、および非効率性につながる可能性があります。可能な場合は、賢明にモッキングを使用し、統合テストなどの代替案を考慮することが重要です。
引用:[1] https://cs-syd.eu/posts/2021-10-22-why-mocking-is-a-bad-idea
[2] https://softwareengineering.stackexchange.com/questions/454887/how-to-avoid-too-much-mocking-in-unit-tests-in-a-database-hevy-method
[3] https://ryanclements.dev/posts/youpobrobrobuly-dont need-mocking
[4] https://stackoverflow.com/questions/61793083/should-i-mock-every-single依存関係でテスト
[5] https://softwareengineering.stackexchange.com/questions/382087/how-exactly-should-unit-tests- be without-mocking-extensive
[6] https://pytest-with-eric.com/mocking/pytest-common-mocking-problems/
[7] https://www.reddit.com/r/typescript/comments/1ei9f4a/is_it_me_or_mocking_everything_everywhere_in/
[8] https://stackoverflow.com/questions/38181/hen-should-i-mock
[9] https://www.qodo.ai/blog/mock-testing/
[10] https://hynek.me/articles/whatto-mock-in-5-mins/
[11] https://vinted.engineering/2023/10/02/mocking-framework-downside/