NUnit で privateメンバを単体テストしたくなったらとかいう話
参考
こんな感じのやり取り:
質問「NUnit 使ってプライベートメソッドをどうやってテストするの? 」
いろんな意見
- 一般に,ユニットテストはパブリックインタフェースを扱うのであり,ユーザ視点で結果が正しい限り実装はどうでもいいこと
- 緊急にテストしたいプライベートメンバがあるのなら,分解することを考えるべきだ
- ユニットテストはクラスに対するものではなくてコードに対するもの.たとえばひとつのパブリックメソッドと10個のプライベートメソッドがあって,パブリックI/Fの結果を得るために10個のプライベートメソッドを使っているとすると10個のプライベートメソッドが意図通りに動いているか確認するすべがない
- プライベートメソッドは実装の詳細である.ユニットテストを実施するポイントの多くは振る舞いを変えることなく実装のリファクタリングを可能にすることである.もし,プライベートメソッドが複雑になって個別にテストをカバーしたくなった場合,クラスを分離してそのパブリック(または内部)メソッドとすることができ得る.つまり,ロジックの断片がテストの対象となるのに十分進んでいる(advanced)ならば,おそらくそれ自身がクラスの候補でありそれ自身のテストをもつだろう.
- 基本的にprivateメンバが多くなってきたら,コードをリファクタリングするサイン