プライベートメソッドをJUNITテストで保護するように変更することをお勧めしますか?プライベートメソッドをテスト用に保護するように変更する
答えて
時には役に立ちます。
クラスが拡張可能な場合は、メソッドをfinalにしてください。
また、メソッドが同じパッケージのサブクラスまたは外部クラスによって呼び出されることは想定されていないことを文書化してください。
私はGuava @VisibleForTestingアノテーションを使用して、メソッドが実際にプライベートであるべきことを明確にしています。
@VisibleForTestingに私の目を開いてくれてありがとう。私はこれが存在するのか分からなかった。これはテストの目的のためだけに実装の構文に影響するという点で少し不完全だと感じていますが、非公開にする必要があるメンバーやメソッドを公開するよりも優れています。また、インターフェイスメソッドへのテストを制限することは、過度に厳しく、ときには実用的でない制限と思われます。 – Lolo
代わりにメソッドパッケージをローカルにすることができます。
リフレクションを使用してプライベートメソッドを呼び出すことも、間接的にしか直接テストしないこともできます。
一般的にはありません。ユニットテストの考え方は、ユニットをテストすることです。つまり、インタフェースメソッドの実装です。 "見る"ことができないメソッドをテストしたい場合、これはコードの匂いかもしれません。たぶん、UIコードなどからビジネスロジックを十分に分離していない可能性があります。
あなたのアーキテクチャを再考することをお勧めします。しかし、代わりにあなたのコードをテストしないのであれば、それらのメソッドを保護することをお勧めします。
@ user714965が示唆しているようにリファクタリングすることをお勧めしますが、PowerMockのMockPrivateは、プライベートメソッドの表示を開かずに嘲笑を行うことができます。
通常、テストを書くと、プライベートメソッドをモックする必要はありません。
- 1. 変更をwindow.openerから保護する
- 2. クッキーの変更と保護
- 3. SSLによるセキュリティ保護?
- 4. HTML5ゲーム - 変数の変更から保護する方法
- 5. PHPUnit ::保護された変数を使って__constructをどのようにテストできますか?
- 6. nodejs socket.ioサーバーをクッキーの変更から保護する方法
- 7. 変更からC#コードを保護する方法
- 8. サードパーティ製のアプリケーションの変更からアプリケーションを保護する
- 9. WCFサービス - クライアントだけが使用できるように保護する方法
- 10. Excelパスワード保護のPowershellテスト
- 11. IntelliJの構造置換を使用してフィールド保護レベルを変更する
- 12. C++で保護されたメソッドを単体テストするにはどうすればよいですか?
- 13. ユーザーがスタイルをアップロードできるようにするウェブサイトを保護するサンドボックス
- 14. セキュリティで保護されたサイト用にHTMLをPDFに変換する
- 15. Springセキュリティによるメソッドの保護
- 16. CSRF HTTPによるGETリクエストの保護
- 17. symfonyによるCSRFの保護
- 18. Androidで保護されたデータベースにアクセスして変更するにはrootを使用
- 19. 子クラスの保護された変数の値を変更する
- 20. 子クラスJavaのParentクラスから保護された変数を変更する
- 21. ディレクトリを完全に保護する
- 22. Membaseを保護するには?
- 23. PHPでPHPSESSIDを保護するには?
- 24. VPSでアプリケーションを保護するには?
- 25. チャートコードを保護するにはどうすればよいですか?
- 26. Google Maps APIを保護するにはどうすればよいですか?
- 27. AIRでコンテンツを保護するにはどうすればよいですか?
- 28. iPhoneでブロブデータを保護するにはどうすればよいですか?
- 29. PHPフォームを保護するにはどうすればよいですか?
- 30. Guiceバインディングを機能テスト用に変更するにはどうすればよいですか?
なぜでしょうか?あなたはテストの前に何かを変えます、私はそれの理由を見ることができませんか? – Nanne
ほとんど確かに良い考えではありません。クラスの内部メソッドを直接テストする場合は、それらを別のクラスにリファクタリングすることを検討する必要があります。 –
プライベートメソッドが単体テスト環境で利用できないリソースを返す場合に、これを実行しました。それを呼び出す他の(非プライベート)メソッドをテストしたいと思います。それを保護することにより、無効にすることができるリソースの代わりにいくつかのスタブ/モックを返すように、オーバーライドすることができます。これは単体テストが実現可能になることを意味し、私はこれを別の方法で見つけることができませんでしたが、それは理想的ではありません。 –