如何为单元测试设置HttpContext.Current.User.Identity.Name

时间:2012-01-13 16:07:31

标签: asp.net unit-testing

背景

我正在测试ASP.NET 4.0中的一个函数(Web Forms而不是MVC),我正在使用Visual Studio 2010中内置的单元测试。我已经创建了一个单独的测试项目并为每个类创建一个测试类在Web项目中。

问题:

我遇到了一个问题,其中一个函数使用HttpContext.Current.User.Identity.Name作为逻辑的一部分。如何在Unit测试项目类或方法中设置该值以便我可以测试该函数?

更新

我希望的是我可以在我的测试方法之上设置其他属性。目前我有:

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

2 个答案:

答案 0 :(得分:3)

你问错了问题。 HttpContext.Current.User.Identity是一个依赖项,您应该在单元测试代码之前进行封装。如果封装(可能在接口后面),您可以用测试数据/对象替换抽象。

答案 1 :(得分:1)

您可以通过实施Principal创建自己的IPrincipal,其中您需要使用Identity界面定义自定义IIdentity,您可以在其中返回Name属性的值。

然后,您可以将HttpContext.Current.User设置为自定义的Principal对象。