如何在ASP.NET Core 1.1中对使用HttpContext的MVC控制器进行单元测试

时间:2016-11-18 08:37:58

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

我在.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而我在嘲笑它时没有成功。

非常感谢任何写这个测试的帮助!

1 个答案:

答案 0 :(得分:3)

您可以在此辅助函数中设置一个具有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,它在AuthenticationManager属性中提供了默认的HttpContext.Authentication