依存性注入を扱う初心者を考えてみましょう。NerdDinnerで2つの関連するクラスを分析しています。
アプリケーションからのDinnerRepository:
テストからのFakeDinnerRepository:
IDinnerRepository
ここでの重要なアイデアは、を実装し、さまざまな実装とプライベートメンバーを提供することであるため、これらはさまざまなロジックを実装します。これはもちろん必要です。
テストはコントローラー用であることは理解していますが、データアクセスロジックには2つの異なる実装があるのではないかと心配しています。あらゆる種類のORM、ADO.NET、SubSonic、または任意の種類のデータアクセスを使用するプロジェクトを検討してください。はい、実際のリポジトリと一致するように偽のリポジトリを設定できます。
私が心配しているのは、時間の経過とともに、実際のリポジトリの実装の詳細が変わることです。おそらく、タイプミス、またはクエリ内の他の重要な実装の詳細の変更です。これにより、偽のリポジトリと実際のリポジトリの間でモデルのロジックが一致しない可能性があります。心配なのは、実際のリポジトリとテストリポジトリの実装が同期しなくなることです。
質問:
- この場合、モデルをどのようにテストしますか?
- モデルをテストするのは適切ですか?
- テストがビジネスロジックの実装に追いつくようにするのは規律の問題ですか?