テストケースを構築できるように、依存関係注入パターンを使用してDefaultControllerという名前のMVCベースコントローラを実装しました。以下の例:テスト目的のための基本コントローラ依存性注入を解決するには?
public class DefaultController : Controller
{
protected readonly ISessionHelper _sessionHelper;
string _thisUserOpenID;
protected IUsersRepository _UserRepository;
...
public DefaultController()
{ } //not for testing
public DefaultController(ISessionHelper session, IUserRepository repo)
{
_sessionHelper=session;
_UserRepository = repo;
}
}
その後、私は私がどのように実際に知っていない状況で自分自身を発見したいくつかのテストケースを構築し、今
など、このコントローラ、にHomeController、UserControllerでを使用して、私のコントローラを持っています注入依存パターンを使用します。
[TestMethod]
public void Welcome_Message_In_ViewData_Has_Coockie_User_Display_Name()
{
// Below I want to insert FakeRepositories using
//ISessionHelper and so on. but the constructor
//for homecontroller don't have it.
HomeController controller = new HomeController();
ちょっと注意してください。パラメータのないコンストラクタを取り除くと、独自のコントローラファクトリをロールバックする必要があります。 – womp
なぜ工場ですか?上のケースでは、DIフレームワークがすべてを注入しています。 ISessionHelperやIUserRepositoryのようなものは、静的セッションを実行する必要があります。ほとんどの場合、渡す値はありません。 あなたがする必要があるのは、 です。var controller = IoC.Resolve ;それはすべてあなたのために構築されています。 コンストラクタを介して注入することは、viaメソッドのparamsに変数を渡すか、publicプロパティを設定する(コマンドパターンと同じように)ことを意味します。 –
Bealer