c# - 如何在 ASP.NET Core 1.1 中对使用 HttpContext 的 MVC Controller 进行单元测试

标签 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 并且我没有成功地模拟它。

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

最佳答案

您可以使用 DefaultHttpContext 的实例设置 Controller ,就像在此辅助函数中一样。

    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 属性。

关于c# - 如何在 ASP.NET Core 1.1 中对使用 HttpContext 的 MVC Controller 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40672581/

相关文章:

python - PyTest 警报/消息框

java - Spring JUnit 测试中未调用 Hibernate 监听器

c# - VS 2017 ASP.NET Core 测试项目 - Microsoft.AspNetCore.Identity 缺失

c# - ASP.Net intellisense 错误地建议路径为 webroot

c# - 是否可以将 C# DataAnnotations 与 IOC 容器一起使用?

c# - 如何通过 Child ReorderList 中的代码隐藏更改 SqlDataSource 的 ConnectionString 属性?

c# - 如何在 Powershell 中嵌套自定义 .NET 类型?

c# - 小数精度

java - 如何为 "InterruptedException"编写单元测试

asp.net-core - 在 ASP.NET Core MVC 中使用 Tag Helpers 有什么好处