[解決済み] Private/Protectedメソッドはユニットテストに入れるべき?[クローズド]
質問
TDD開発において、一般的に最初に行うことは、インターフェースを作成し、そのインターフェースに対するユニットテストを書き始めることです。TDDプロセスを進めていくと、最終的にはインターフェイスを実装するクラスを作成し、ある時点でユニットテストに合格することになります。
今、私の質問は、インターフェイスによって公開されたメソッド/プロパティをサポートするために、私のクラスで書かなければならないかもしれないプライベートおよびプロテクトされたメソッドについてです。
-
クラス内のプライベートメソッドは独自のユニットテストを持つべきでしょうか?
-
クラス内の protected メソッドは独自のユニットテストを持つべきでしょうか?
私の考えです。
-
特にインターフェイスにコーディングしているので、protected/privateメソッドはブラックボックスなので気にする必要はないでしょう。
-
私はインターフェイスを使用しているので、定義された契約がインターフェイスを実装する異なるクラスによって適切に実装されていることを検証するためにユニットテストを書いています。したがって、再び私はプライベート/保護されたメソッドを心配すべきではありませんし、それらはインターフェイスによって定義されたメソッド/プロパティを呼び出すユニットテストを通じて実行されるべきです。
-
もし私のコードカバレッジが、protected/privateメソッドがヒットしていることを示さないなら、私は正しいユニットテストを持っていないか、使われていないコードがあり、削除されるべきです。
どのように解決するのですか?
いいえ、プライベートメソッドやプロテクトメソッドをテストすることは考えていません。 クラスの private および protected メソッドは public インターフェイスの一部ではないので、public な振る舞いを公開することはありません。 一般的にこれらのメソッドは、テストを緑にした後に適用するリファクタリングによって作成されます。
ですから、これらのプライベートメソッドはテストされる 暗黙のうちに を暗黙のうちにテストしていることになります。
より哲学的な話をすると、テストしているのはメソッドではなく振る舞いであることを忘れないでください。 つまり、テスト対象のクラスができることのセットについて考えるなら、そのクラスが期待通りの振る舞いをすることをテストし主張できる限り、その振る舞いを実装するためにクラスが内部で使用するプライベート(およびプロテクト)メソッドがあるかどうかは関係ないのです。 それらのメソッドは、公開された動作の実装の詳細です。
関連
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] フェイク、モッキング、スタビングの違いとは?
-
[解決済み] TDDのためのJavaScriptユニットテストツール
-
[解決済み] モッキングとは?
-
[解決済み] プライベートメソッドのユニットテストはどのように行うのですか?
-
[解決済み] 抽象クラスをユニットテストする方法:スタブで拡張する?
-
[解決済み] NUnit vs. MbUnit vs. MSTest vs. xUnit.net [終了しました。]
-
[解決済み】PHPUnitでprotectedメソッドをテストするためのベストプラクティス
-
[解決済み】ユニットテストについて語るときの「DAMP not DRY」の意味とは?
-
[解決済み] Visual Studioには単体テストのコードカバレッジがあるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] プライベートメソッドをテストすべきか、パブリックメソッドのみをテストすべきか?[クローズド]
-
[解決済み】ユニットテスト、インテグレーションテスト、スモークテスト、リグレッションテストとは何ですか?終了
-
[解決済み】mochaのテスト用ディレクトリを指定するには?
-
[解決済み] GTestとCMakeを使った作業の始め方
-
[解決済み] ユニットテストとは、どのようなもので、どのように行うのですか?[重複あり]
-
[解決済み] Junit: 統合テストと単体テストの分割
-
[解決済み] Angularのリターンモジュールのテストサービスが定義されていない
-
[解決済み] Kotlinで期待される例外をテストする
-
[解決済み] パニックが発生したことを確認するRustのユニットテストはどのように書けばよいですか?