【问题标题】:First Test Crashes using MSTEST with ASP.NET MVC 1第一次使用 MSTEST 和 ASP.NET MVC 1 测试崩溃
【发布时间】:2010-03-18 01:40:15
【问题描述】:

我正在尝试开始使用单元测试,我想测试以下控制器:

公共类 AjaxController : 控制器 {

...

    public JsonResult RateVideo( int userRating, long videoId )
    {

        string userName = User.Identity.Name;

... }

}

我使用以下方法创建了一个 TestClass:

[ 测试方法 public void TestRateVideo()

    {            

        //Arrange
        AjaxController c = new AjaxController();

        //Act
        JsonResult jr = c.RateVideo(1, 1);



        //Assert
        //Not implemented yet

    }

我选择调试并运行测试。当代码到达第一条语句时:

字符串用户名 = User.Identity.Name;

调试停止,我收到一条消息,指出测试失败。

如果您能提供任何指导,我们将不胜感激。

【问题讨论】:

  • 请格式化源代码

标签: asp.net asp.net-mvc mstest


【解决方案1】:

测试控制器最常见的问题是使用依赖于 HttpContext 的函数。 User 属性的实现类似于:

public IPrincipal get_User()
{
    if (this.HttpContext != null)
    {
        return this.HttpContext.User;
    }
    return null;
}

如您所见,User 将返回 null,因为 HtppContext 尚未初始化,调用 .Identity 将引发异常。 幸运的是,MVC 允许您设置 ControllerContext 属性,以便您可以使用模拟的 HttpContext 创建自己的实例。

MVCContrib 项目有一些测试助手。您可以使用 MVCContrib.TestHelper.dll 中的 TestControllerBuilder 在带有模拟上下文的测试类中构建控制器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多