2012-01-13 148 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设置为您的自定义主体对象。