单元测试.net Web Api.设置查询字符串值

use*_*337 3 c# rest asp.net-mvc

我的ApiController HttpGet动作的第一行就是这个

var returnOnlyDefault = (Request.GetQueryNameValuePairs()
    .Any(kv => ((kv.Key.ToLower() == "defaultview") && (kv.Value.ToLower() == "true"))));
Run Code Online (Sandbox Code Playgroud)

这将查找"defaultview"的查询字符串值.代码"有效",但我无法对其进行单元测试.

在我的单元测试中,我正在做以下事情

var controller = new Controllers.ViewsController { Request = new HttpRequestMessage() };
controller.Request.Properties.Add(new KeyValuePair<string, object>("defaultview", "true"));
Run Code Online (Sandbox Code Playgroud)

请求uri当然是null.测试失败,因为它没有获取查询字符串值.

小智 13

您应该设置请求Uri:

controller.Request = new HttpRequestMessage(HttpMethod.Get, "http://localhost:51083/?param1=someValue&param2=anotherValue");
Run Code Online (Sandbox Code Playgroud)

现在,ApiController中的get querystring params按预期工作:

var queryStringParams = Request.GetQueryNameValuePairs().ToList();
var param1 = queryStringParams.FirstOrDefault(kv => kv.Key.Equals("param1")).Value;
Run Code Online (Sandbox Code Playgroud)

param1现在是'someValue'并且单元测试运行.