如何在ASP.NET Core中的单元测试中为请求设置查询字符串?

时间:2018-02-02 02:09:14

标签: asp.net-core

我正在为我的ASP.NET核心站点编写单元测试,我需要能够为请求设置查询字符串。如何在ASP.NET Core中的单元测试中为请求设置查询字符串?

2 个答案:

答案 0 :(得分:3)

首先必须构建Controller - >的对象树。 ControllerContext - > DefaultHttpContextDefaultHttpContext对象的request属性的类型为DefaultHttpRequest。因此,如果您将HttpContext.Request转换为DefaultHttpRequest,则可以设置QueryString参数。

var controller = new FunController()
{
    ControllerContext = new ControllerContext
    {
        HttpContext = new DefaultHttpContext()
    }
};
controller.HttpContext.Request as DefaultHttpRequest).QueryString = new QueryString("?funfactor=100");

答案 1 :(得分:3)

如果您可以使用Integration testing,也可以使用TestServer方法。请在此处查看详细信息 - Testing controller logic in ASP.NET Core。在这种情况下,带有查询参数的控制器操作测试可能如下所示:

var hostBuilder = new WebHostBuilder()
    .UseEnvironment("Testing")
    .UseStartup<Startup>();

var server = new TestServer(hostBuilder);
var client = server.CreateClient();

HttpResponseMessage response = client.GetAsync("/api/mycontroller/things?param=value").Result;