【问题标题】:How to unit test MVC controller that uses HttpContext in ASP.NET Core 1.1如何在 ASP.NET Core 1.1 中对使用 HttpContext 的 MVC 控制器进行单元测试
【发布时间】:2016-11-18 08:37:57
【问题描述】:

我在 .Net Core 1.1 框架上用 ASP.Net Core 编写了这个小方法:

public class AccountController : Controller
{
    public IActionResult Logout()
    {
        HttpContext.Authentication.SignOutAsync("SchemaName");
        HttpContext.Authentication.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);

        return RedirectToAction("Index", "Home");
    }
}

我在如何编写一个单元测试来验证此方法是否返回 RedirectToActionResult 并尝试了许多不同的方法,这些方法基于在这里和那里找到的旧信息和相对新信息。问题是HttpContextnull,我一直没有成功地模拟它。

对于编写此测试的任何帮助将不胜感激!

【问题讨论】:

    标签: c# unit-testing asp.net-core-mvc .net-core


    【解决方案1】:

    您可以使用 DefaultHttpContext 的实例设置控制器,就像在这个辅助函数中一样。

        public MyController CreateController()
        {            
            var actionContext = new ActionContext
            {
                HttpContext = new DefaultHttpContext(),
                RouteData = new RouteData(),
                ActionDescriptor = new ControllerActionDescriptor()
            };
    
            var controller = new MyController
            {
                ControllerContext = new ControllerContext(actionContext)
            };
    
            return controller;
        }
    

    那么 MyController 实例的HttpContext 属性不再是null,它在HttpContext.Authentication 属性中提供了一个默认的AuthenticationManager

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-30
      • 2014-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多