最近、.NETアセンブリの保護されたメソッドに[TestInitialize]を追加することは考慮されていませんが、メソッドをパブリックにすると、ユニットテストランナー(この場合はResharper)によって呼び出されました。過去に何度かテスト方法でこれに気づきました。
技術的に言えば、パブリックメソッドと同様にプライベートメソッドについても簡単に反映できます。実際のところ、リフレクションはプライベートメソッドの単体テストに使用される方法です。
では、なぜユニットテストメソッドをすべて公開する必要があるのですか?
2
それは本当に良い質問です。私が聞いた唯一の良い議論は、SOLID原則の一部である「実装ではなく、インターフェイスへのプログラム」という原則に従うということです。
—
ロバートハーヴェイ
彼はクラスのテストについて話しているのではなく、テストフレームワークによって呼び出される実際のテストメソッドについて話しているとは思いません。
—
jtiger
Javaの@RobertHarvey、同様の制限(JUnitなど)の理由は、フレームワーク設計者が
—
gnat
setAccessible
、カスタムSecurityManagerによってブロックされる可能性のある
この設計上の決定は、幅広い用途を対象とした汎用フレームワークのために行われたことを考慮する必要があります。そのような場合、設計者が最悪の事態を想定して準備する方が安全です。会社の内部フレームワーク(目的のセキュリティポリシーを保証する機会がある場合)、または狭い特殊な目的のツール(「アクセスできないメンバーのビューアー」など)である場合、デザイナー考慮すべき他のオプションがあります
—
-gnat
@GregBurghardtこの動作はNunitで見られ、おそらくMicrosoftが書いていない他のテストフレームワークです。この質問をしてから数年で、.NETについてもっとよく理解できましたが、それでも公正な質問だと思います。コメントには良い議論があります。
—
ジャスティンディアリング