2008-11-17 57 views
5

我想在我的ASP.NET MVC應用程序中單元測試一個頁面,當發佈到時,將刪除用戶的項目。我想限制此頁面,以便它只能由所述項目的所有者發佈。最初,我想在控制器中進行快速檢查,檢查HttpContext.Current.User.Identity.Name是否與該項目的所有者相同,但我很快意識到單元測試會很困難。如何在ASP.NET MVC中存留User.Identity.Name?

我應該創建一個接口來提供訪問當前登錄用戶名的方法嗎?

回答

4

你的問題的最後一行可能是最快的解決方案,但是,我不認爲你需要創建界面,HttpContext.Current.User已經是一個IPrincipalHttpContext.Current.User.Identity已經是一個IIdentity

如果您檢查邏輯或者使用這些接口,控制器可以嘲笑通過您所創建的HttpContext.Current.User.Identity

希望有所幫助,而不是一個IIdentity的!

2

我使用Thread.CurrentPrincipal.Identity.Name。爲單元測試創​​建一個GenericPrincipal並附加它是微不足道的。

5

您可以使用此代碼

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

+0

你知道我在哪裏可以找到素類?我已經遍尋MSDN試圖找到關於它的文檔,但沒有取得任何進展。 – 2013-12-11 01:02:28