JUNIT テスト用に private メソッドを protected に変更するのは良い考えですか?
4 に答える
時々役に立ちます、はい。
クラスが拡張可能な場合は、必ずメソッドを final にしてください。
また、メソッドが同じパッケージのサブクラスまたは外部クラスによって呼び出されることが想定されていないという事実を文書化します。
Guava @VisibleForTesting アノテーションを使用して、メソッドが実際には非公開であることを明確にします。
いいえ、一般的にはありません。単体テストの考え方は、... 単位をテストすることです。つまり、インターフェイス メソッドの実装です。「見る」ことができないメソッドをテストしたい場合、これはコードの匂いかもしれません。ビジネス ロジックを UI コードなどから十分に分離していない可能性があります。
したがって、最良のアイデアは、アーキテクチャを再考することです。しかし、代わりにコードをテストしない場合は、それらのメソッドを保護することをお勧めします。
代わりに、メソッド パッケージをローカルにすることができます。
リフレクションを使用してプライベート メソッドを呼び出すか、private
メソッドを直接テストせず、間接的にのみテストするように決定できます。
@ user714965が提案したようにリファクタリングすることをお勧めしますが、PowerMockのMockPrivateは、プライベートメソッドの可視性を開かずにモックを実行できます。
通常、最初にテストを作成すると、プライベートメソッドをモックする必要がない設計になります。