【问题标题】:How set HttpContext.Current.User.Identity.Name for Unit Testing如何为单元测试设置 HttpContext.Current.User.Identity.Name
【发布时间】:2012-01-13 16:07:31
【问题描述】:

背景:

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

问题:

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

更新:

我所希望的是,我可以在我的测试方法之上设置额外的属性。目前我有:

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

【问题讨论】:

标签: asp.net unit-testing


【解决方案1】:

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

【讨论】:

  • 正如我所想,要找到关于该主题的入口链接更难。如果你用谷歌搜索依赖注入 + HttpContext,你会得到很多东西,但其中大部分都与特殊的依赖注入容器有关。这是一个穷人依赖注入的链接,为您提供了大致的思路:stackoverflow.com/questions/5251636/…
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2014-11-25
    • 2014-03-02
    • 2017-08-31
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2011-11-26
    相关资源
    最近更新 更多