如何使用可选的查询字符串参数测试MVC路由

时间:2012-05-25 18:11:52

标签: asp.net-mvc mvccontrib attributerouting

我有这种控制器方法:

[GET("/whatever/list")]
public ActionResult Index(string sortby, string order)

我正在尝试使用MvcContrib路由测试来测试它:

"~/whatever/list".ShouldMapTo<MyController>(c => c.Index(string.Empty, string.Empty));
"~/whatever/list?sortby=type&order=desc".ShouldMapTo<MyController>(c => c.Index("type", "desc"));

但是,它会返回此错误。

  

失败:MvcContrib.TestHelper.AssertionException:值为   参数'sortby'不匹配:预期''但是'';没有价值   在名为'sortby'的路由上下文操作参数中找到 - 确实是你的   匹配路由包含一个名为'sortby'的标记?

我错过了什么?

2 个答案:

答案 0 :(得分:3)

基于断言消息(expected '' but was '';,因此断言中的一个值为nullstring.Empty),您的第一个测试失败了,因为您使用了string.Empty但是字符串的默认值为null

将您的断言更改为使用null,它应该是wotk:

"~/whatever/list".ShouldMapTo<MyController>(c => c.Index(null, null));

答案 1 :(得分:2)

我喜欢

var route = "~/whatever/list".WithMethod(HttpVerbs.Get);
route.Values.Add("sortby", "type");
route.Values.Add("order", "desc");
route.ShouldMapTo<MyController>(c => c.Index("type", "desc"));