单元在Asp.Net Core 2.0中测试请求

Wil*_*uce 8 c# unit-testing xunit asp.net-core-2.0

我正在尝试为这种方法编写一些单元测试,但我无法弄清楚如何设置Request.具体来说,我需要设置Query和头属性Referer.

public IActionResult Index()
{
    if (User.Identity.IsAuthenticated)
    {
        return RedirectToAction("Index", "Home");
    }

    var query = Request.Query;
    StringValues returnUrlValue;
    if (query.TryGetValue("returnUrl", out returnUrlValue))
    {
        var returnUrl = returnUrlValue.ToString();
        var referer = Request.Headers["Referer"].ToString();
        if (string.IsNullOrEmpty(returnUrl) && !string.IsNullOrEmpty(referer))
        {
            returnUrl = WebUtility.UrlEncode(referer);
        }

        if (Url.IsLocalUrl(returnUrl) && !string.IsNullOrEmpty(returnUrl))
        {
            ViewBag.ReturnUrl = returnUrl;
        }
    }

    return View();
}
Run Code Online (Sandbox Code Playgroud)

我知道在request进入控制器之前经过中间件,所以它不能作为参数传递给控制器​​.但是,Request控制器上的对象是readonly,也不能分配.因此,类似下面的内容将无法正常工作.

var controller = new LoginController();
controller.Request = new DefaultHttpRequest(new DefaultHttpContext())
{
    QueryString = new QueryString("?returnUrl")
};
Run Code Online (Sandbox Code Playgroud)