私は、最新のASP.NET MVCプロジェクトを構築している間に、Unit Testing、Dependancy Injection、そしてそのすべてのジャズに入るようになっています。IoCコンテナなしでコントローラをどのようにユニットテストできますか?
ここで、私はユニットテストをしたいと思っていますが、IoCコンテナなしでこれを適切に行う方法がわかりません。
例えば、単純なコントローラーください:このクラスは、理由SqlQuestionsRepositoryのその直接のインスタンス化の非常にユニットテスト可能ではありません
public class QuestionsController : ControllerBase
{
private IQuestionsRepository _repository = new SqlQuestionsRepository();
// ... Continue with various controller actions
}
を。だから、依存性の注入ルートを下ると行うことができます:
public class QuestionsController : ControllerBase
{
private IQuestionsRepository _repository;
public QuestionsController(IQuestionsRepository repository)
{
_repository = repository;
}
}
これは良さそうです。 IQuestionsRepositoryで単体テストを簡単に書くことができます。しかし、今コントローラをインスタンス化しようとしていますか?コールチェーンSqlQuestionRepositoryをインスタンス化する必要があります。私は単に問題を他の場所に移しただけで、それを取り除かなかったようです。
これは、IoCコンテナが私のためにコントローラの依存関係を配線すると同時に、コントローラを簡単にユニットテスト可能に保つことによって助けになる良い例であることが分かりました。
私の質問は、この性質のものについてユニットテストをどうやって行うのですか IoCコンテナなし?
注:私はIoCコンテナに反対していません。すぐにその道を行く可能性があります。しかし、私はそれらを使用しない人々のための代替は何かが不思議です。
@Peter、非常に良い提案。あなたのプロジェクトでIoCコンテナを使用した経験がありますか、それともまだ必要がないのですか? – mmcdole
私は.NETの経験はあまりなく、私の仕事の大半はIoCのSpringを使ったJavaのものです。これは、モジュール性を改善するのに非常に役立ちました。 – Peter
@Peter:これは私が使用しているパターンとほぼ同じです。私は同じことをする答えを掲示しましたが、あなたがJavaの人であることを意識していないかもしれないC#の言語機能を使用しています。 –