我想在我的ASP.NET MVC應用程序中單元測試一個頁面,當發佈到時,將刪除用戶的項目。我想限制此頁面,以便它只能由所述項目的所有者發佈。最初,我想在控制器中進行快速檢查,檢查HttpContext.Current.User.Identity.Name是否與該項目的所有者相同,但我很快意識到單元測試會很困難。如何在ASP.NET MVC中存留User.Identity.Name?
我應該創建一個接口來提供訪問當前登錄用戶名的方法嗎?
我想在我的ASP.NET MVC應用程序中單元測試一個頁面,當發佈到時,將刪除用戶的項目。我想限制此頁面,以便它只能由所述項目的所有者發佈。最初,我想在控制器中進行快速檢查,檢查HttpContext.Current.User.Identity.Name是否與該項目的所有者相同,但我很快意識到單元測試會很困難。如何在ASP.NET MVC中存留User.Identity.Name?
我應該創建一個接口來提供訪問當前登錄用戶名的方法嗎?
你的問題的最後一行可能是最快的解決方案,但是,我不認爲你需要創建界面,HttpContext.Current.User
已經是一個IPrincipal
和HttpContext.Current.User.Identity
已經是一個IIdentity
。
如果您檢查邏輯或者使用這些接口,控制器可以嘲笑通過您所創建的HttpContext.Current.User.Identity
希望有所幫助,而不是一個IIdentity的!
我使用Thread.CurrentPrincipal.Identity.Name。爲單元測試創建一個GenericPrincipal並附加它是微不足道的。
您可以使用此代碼
Controller CreateControllerAs(string userName) {
var mock = new Mock<ControllerContext>();
mock.SetupGet(p => p.HttpContext.User.Identity.Name).Returns(userName);
mock.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(true);
var controller = new SomeController();
controller.ControllerContext = mock.Object;
return controller;
}
它採用moq LIB
你知道我在哪裏可以找到素類?我已經遍尋MSDN試圖找到關於它的文檔,但沒有取得任何進展。 – 2013-12-11 01:02:28