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

Mar*_*ing 6 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

我在如何编写单元测试以验证此方法是否返回 a 方面苦苦挣扎,RedirectToActionResult并根据此处和那里找到的旧信息和相对新信息尝试了许多不同的方法。问题是,HttpContextnull,我已经在嘲笑它是不成功的。

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

Ral*_*ing 8

您可以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;
    }
Run Code Online (Sandbox Code Playgroud)

然后HttpContextMyController 实例的属性null不再存在,它AuthenticationManagerHttpContext.Authentication属性中提供了一个默认值。