我在.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
而我在嘲笑它时没有成功。
非常感谢任何写这个测试的帮助!
答案 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
。