2012-01-13 135 views
3

背景:如何設置HttpContext.Current.User.Identity.Name單元測試

我測試的ASP.NET 4.0(Web窗體不是MVC)中的功能,我使用單元測試內置於Visual Studio 2010.我創建了一個單獨的測試項目併爲Web項目中的每個類創建一個測試類。

問:

我與使用HttpContext.Current.User.Identity.Name作爲邏輯的一部分的功能之一碰到的問題。如何在單元測試項目類或方法中設置該值,以便我可以測試該函數?

更新:

什麼我希望的是,有附加的屬性我可以設置我上面的測試方法。目前我有:

[TestMethod()] 
[HostType("ASP.NET")] 
[AspNetDevelopmentServerHost("C:\\DEV\\ProjectName\\ClientWeb", "/")] 
[UrlToTest("http://localhost:9018/")] 
public void GetLoginTest() 
{ 
    // test code 
} 
+0

可能重複[單元測試Web服務 - HttpContext](http://stackoverflow.com/questions/4028056/unit-testing-web-services-httpcontext) – BNL 2012-01-13 16:12:40

+0

RE:屬性,HttpContext.Current不兼容單元測試。你需要抽象某種類型。 – BNL 2012-01-13 16:30:00

回答

3

你問錯了問題。 HttpContext.Current.User.Identity是你應該封裝的依賴項,然後你可以單元測試你的代碼。如果封裝(可能位於接口後面),則可以用您的測試數據/對象替換抽象。

+0

你能指點我這個方法的好例子嗎? – Josh 2012-01-13 16:38:54

+1

就像我想的那樣,很難找到關於該主題的入口鏈接。如果你的谷歌的依賴注入+ HttpContext你得到很多的東西,但其中大部分與特殊的依賴注入容器相關。這裏是一個窮人的依賴注入鏈接給你的一般想法:http://stackoverflow.com/questions/5251636/asp-net-mvc-and-ioc-chaining-injection – 2012-01-13 22:04:54

1

你可以創建自己的Principal通過實施IPrincipal,內你需要使用IIdentity接口,這裏面你會回到你的價值,爲Name屬性來定義一個定製Identity

然後,您可以將HttpContext.Current.User設置爲您的自定義主體對象。