1

カミソリビューの単体テストを試みています。特に、ログインしているユーザーが管理者である場合にメインツールバーに表示される管理ボタンを作成しようとしています。

現在、テストはありません。その方法は、CurrentUser という静的オブジェクトを設定することです。

かみそり:

@if CurrentUser.IsAdmin()
{
     <button>admin</button>
}

ただし、プロジェクト内の別の場所に設定された静的オブジェクトである CurrentUser を呼び出しているため、このカミソリ ビューを個別に単体テストできないかどうかはわかりません。User オブジェクトを作成し、ログインしているユーザーのインスタンスを作成し、それをカミソリ ビューに挿入する必要があると思います。

例えば。

Controller
{ 
    ActionResult Index(){
        var currentUser = //somehow get current user
        return View(currentUser);
}

しかし、私がテストしているカミソリ ビューが _Layout ページの場合はどうでしょうか。ページをレンダリングするたびに、現在のユーザーを挿入する必要がありますか?

現在のユーザーをビューの親に挿入する方法はありますか? View メソッドをオーバーライドする必要があるのでしょうか。何か案は?

ありがとう!

4

2 に答える 2

0

Try calling the LogOn Action on the Account Controller first to be logged in:

        [TestMethod]
        public void Index()
        {
            // Arrange
            AccountController account = new AccountController();
            HomeController controller = new HomeController();

            var accRes = account.LogOn(new Models.LogOnModel() { UserName = "mylogin", Password = "abc123" }, string.Empty);

            // Act
            ViewResult result = controller.Index() as ViewResult;
        }
于 2012-08-23T14:51:56.957 に答える
0

DI (依存性注入) コンテナー (ninject など) の使用について考えたことはありますか? 次に、次のように CurrentUser を Controllers コンストラクターに追加できます。

class Controller 
{  
    private _currentUser;
    public Controller(IUser currentUser) {
        _currentUser = currentUser
    }

    ActionResult Index(){ 
        return View(_currentUser); 
    }
} 

そして静的クラスを DI に割り当てます (ninject の場合):

ninjectKernel.Bind<IUser>().To<CurrentUser>();

単体テストでは、テスト ユーザーでコントローラーを簡単にインスタンス化できます。

[TestMethod]         
public void Index()         
{         
    // Arrange         
    CurrentUser currentUser = new CurrentUser() { Role = "Admin" };        
    HomeController controller = new HomeController(currentUser);                 

    // Act         
    ViewResult result = controller.Index() as ViewResult;
    Assert.IsTrue(((CurrentUser)result.ViewData.Model).IsAdmin());
} 

ただし、それによって HTML 出力を直接テストすることはできません。モデルが正しく設定/動作しているかどうかのみを確認できます。

于 2012-08-27T11:25:53.913 に答える