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