最新のASP.NETMVCプロジェクトを構築しながら、単体テスト、依存関係の注入、およびそのすべてのジャズに取り組み始めています。
私は今、コントローラーの単体テストを行いたいと思っていますが、IoCコンテナーなしでこれを適切に行う方法を理解するのに苦労しています。
単純なコントローラーを例にとってみましょう。
public class QuestionsController : ControllerBase
{
private IQuestionsRepository _repository = new SqlQuestionsRepository();
// ... Continue with various controller actions
}
このクラスは、SqlQuestionsRepositoryを直接インスタンス化するため、ユニットテストはあまりできません。それでは、ディペンデンシーインジェクションルートをたどって実行しましょう。
public class QuestionsController : ControllerBase
{
private IQuestionsRepository _repository;
public QuestionsController(IQuestionsRepository repository)
{
_repository = repository;
}
}
これは良いようです。これで、モックIQuestionsRepositoryを使用して単体テストを簡単に作成できます。しかし、コントローラーをインスタンス化するにはどうすればよいでしょうか。コールチェーンのさらに上のどこかで、SqlQuestionRepositoryをインスタンス化する必要があります。問題を解決するのではなく、単に問題を別の場所に移したようです。
さて、これはIoCコンテナーがコントローラーの依存関係を配線することで役立つと同時に、コントローラーを簡単にユニットテスト可能に保つ良い例であることを私は知っています。
私の質問は、 IoCコンテナを使用せずに、この種のものの単体テストをどのように行うと想定するかということです。
注:私はIoCコンテナーに反対しているわけではなく、まもなくその道を進むでしょう。しかし、私はそれらを使用しない人々のための代替手段が何であるか興味があります。