TDD を行う場合は、ゲッターとセッターのテストを作成する必要があります。それも。コードが非常に単純であっても、テストなしでコードを 1 行も書かないでください。
テストにゲッターとセッターのタンデムを使用するか、ユニットテストフレームワーク機能を使用して保護されたクラスメンバーにアクセスしてそれぞれを分離することは、一種の宗教戦争です。ブラック ボックス テスターとして、私は単体テスト コードを具体的な実装の詳細に結び付けるのではなく、公開 API に結び付けることを好みます。変化を期待しています。開発者には、既存のコードをリファクタリングするよう奨励したいと思います。また、クラスの内部は「外部コード」(この場合は単体テスト) に影響を与えるべきではありません。内部が変更されたときに単体テストを中断したくありません。パブリック API が変更されたとき、または動作が変更されたときに中断したいと考えています。わかりました、わかりました、失敗した単体テストの場合、唯一の問題の原因を特定しないでください。問題の原因を突き止めるには、ゲッターとセッターを調べる必要があります。ほとんどの場合、getter は非常に単純です (コードは 5 行未満です。たとえば、return と例外を伴うオプションの null チェック)。したがって、これを最初に確認することは大したことではなく、時間もかかりません。また、setter のハッピー パスのチェックは、ほとんどの場合、もう少し複雑です (たとえいくつかの検証チェックがあったとしても)。
テスト ケースを分離するようにしてください。他の方法に依存せずにその正確性を検証する SUT (Subject Under Test) のテストを作成してください (上記の例を除く)。テストを分離すればするほど、テストはより多くの問題を発見します。
テスト戦略によっては、ハッピー パスのみをカバーしたい場合があります (プラグマティック プログラマー)。または悲しい道も。すべての実行パスをカバーすることを好みます。すべての実行パスを発見したと思ったら、コード カバレッジをチェックしてデッド コードを特定します (カバーされていない実行パスがあるかどうかを特定するためではなく、100% のコード カバレッジは誤解を招く指標です)。
ブラック ボックス テスターが厳密モードで phpunit を使用し、@covers を使用して付随的なカバレッジを非表示にすることは、ベスト プラクティスです。
単体テストを作成する場合、クラス A のテストはクラス B とは独立して実行する必要があります。したがって、クラス A の単体テストは、クラス B のメソッドを呼び出したりカバーしたりしないでください。
廃止された getter/setter およびその他の「デッド」メソッド (プロダクション コードでは使用されていない) を特定する場合は、そのために静的コード分析を使用します。あなたが興味を持っている指標は、「メソッドレベルでの求心性結合(MethodCa)」と呼ばれています。残念ながら、このメトリック (ca) は PHP 依存のメソッドレベルでは利用できません (参照: http://pdepend.org/documentation/software-metrics/index.htmlおよびhttp://pdepend.org/documentation/software-metrics /afferent-coupling.html)。本当に必要な場合は、お気軽に PHP Depend に投稿してください。同じクラスからの呼び出しを除外するオプションは、「付随的な」呼び出しなしで結果を得るのに役立ちます。「死んだメソッド」を特定した場合は、それが近い将来に使用されることを意図しているかどうかを確認してください (@depricated アノテーションを持つ他のメソッドの対応物)、そうでない場合は削除してください。同じクラスでのみ使用する場合は、private/protected にしてください。このルールをライブラリ コードに適用しないでください。
プラン B: 受け入れテスト (統合テスト、回帰テストなど) がある場合は、単体テストを同時に実行せずに、また phpunits の厳密モードを使用せずに、そのテストを実行できます。これにより、製品コードを分析した場合と非常によく似たコード カバレッジ結果が得られます。しかし、ほとんどの場合、非単体テストは本番コードほど強力ではありません。意味のある結果を得るために、このプラン B が製品コードと「十分に等しい」かどうかは、分野によって異なります。
さらに読む: - 書籍: Pragmatic Programmer - 書籍: きれいなコード