我在 .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
方面遇到了很多困难,并根据到处发现的旧信息和相对新信息尝试了许多不同的方法。问题是 HttpContext
是 null
并且我没有成功地模拟它。
对于编写此测试的任何帮助,我们将不胜感激!
最佳答案
您可以使用 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/