Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon モッキートで例外をock笑するとき、一般的な落とし穴はありますか


モッキートで例外をock笑するとき、一般的な落とし穴はありますか


Mockitoを使用して例外をモックする場合、いくつかの一般的な落とし穴により、テストが効果的でないか、維持が困難になる可能性があります。これらの落とし穴のいくつかとそれらを避ける方法は次のとおりです。

1。オーバーモック**

最も重要な落とし穴の1つは、過度にモックすることです。これは、あまりにも多くの依存関係をあまりにもock笑すると発生し、脆弱で維持が難しいテストにつながります。モッキングが過剰になると、テストがテスト中のシステムの実際の動作よりもモックに焦点を合わせることができます。これを避けるために、非自明の行動を持っている共同行動や相互作用を検証したいコラボレーターのみをock笑することに焦点を当てます。単純なコラボレーションには実際のインスタンスを使用します[3]。

2。無効な例外**

Mockitoは、スローされている例外が特定のスタブの方法で有効であることを保証します。メソッドのチェックされた例外リストにない例外をスローしようとすると、モキトは文句を言います。たとえば、メソッドが「ioException」を宣言しない場合、「ioException」をスローするためにockしようとすると、エラーが発生します[1]。モックされた例外がメソッドに対して有効であることを常に確認してください。

3。 `thenthrow()`を使用するvoidメソッド**

`when()。thenthrow()`は、モックに戻る値がないため、ボイドメソッドでは使用できません。代わりに、ボイドメソッドには `dothrow()`を使用します。これらの方法を誤って混合すると、エラーが発生する可能性があります[2]。

4。特異性の欠如**

例外をock笑する場合、どの例外をテストしているかについて具体的であることが重要です。テストシナリオに関連する例外に焦点を当てることで、過剰なモックを避けてください。これにより、テストを焦点を合わせて保守可能に保つのに役立ちます[2] [8]。

5。実行の誤った取り扱い**

テスト中にock笑された場合でも、アプリケーションコードが例外を正しく処理するように準備されていることを確認してください。これには、例外を処理するためのロジックのテストが含まれ、予想どおりに動作するようにします[2]。

6。意味のあるエラーメッセージの使用**

例外をock笑するときは、テストが失敗した場合に問題を診断するのに役立つ意味のあるメッセージを含めます。この実践により、テストの明確さと有効性が向上します[2]。

7。例外処理ロジックのテスト**

コードが予想どおりに例外を処理していることを確認してください。これには、例外がスローされたときにアプリケーションが正しく動作することを確認することが含まれます。これは、回復力のあるアプリケーションを構築するために重要です[2]。

8。模擬のリセットとクリアのクリア**

Mockitoは、モックを管理するために `reset()`や `clearInvocations()`などの機能を提供します。ただし、これらは控えめに使用する必要があります。模擬のリセットは、模擬がコンテナによって注入され、各テストで再現できない場合など、まれな場合にのみ実行する必要があります。模擬を再現すると大幅なオーバーヘッドにつながる場合、呼び出しのクリアは有用です[1]。

これらの落とし穴を認識し、ベストプラクティスに従うことにより、モックトを効果的に使用して例外をockし、テストが堅牢で保守可能であることを確認できます。

引用:
[1] https://www.toptal.com/java/a-guide-to-everyday-mockito
[2] https://www.browserstack.com/guide/mockito-throw-exception
[3] https://javanexus.com/blog/avoiding-mockito-testing-pitfalls
[4] https://stackoverflow.com/questions/9186604/mockito-exception-when-requires-an-argument-has-has-to-a-method-call-on
[5] https://stackoverflow.com/questions/22540108/best-practics-with-mockito
[6] https://stackoverflow.com/questions/52512548/mock-method-todo-not-not-not-an-exception/52514628
[7] https://contributors.scala-lang.org/t/mockito-testing-nulls-and-exceptions/3915
[8] https://www.janbasktraining.com/community/java/throw-checked-exceptions-from-mocks------mockito