这是ASP.NET MVC v1(尚未使用v2)
我有一个这样的路线条目:
routes.MapRoute(
"Srp",
"soeg-{searchQuery}/{listingType}",
new { controller = "Srp", action = "Search", listingType = string.Empty },
new { listingType = "privat|forhandler|"}
);
以及与之匹配的操作:
public ActionResult Search(QueryParameters queryParameters)
它完美运行 - mvc框架知道将searchQuery和listingType映射到具有相同名称的QueryParameters对象的两个属性。
我的问题是单元测试。我正在使用Mvccontrib项目和LOVING ShouldMapTo方法:
[Test]
public void RegisterSrpRoutes_SoegWithKeywordAndValidListingType_ShouldMapCorrectly()
{
var queryParameters = new QueryParameters {SearchQuery = "hest", ListingType = "privat"};
"~/soeg-hest/privat".ShouldMapTo<SrpController>(controller => controller.Search(queryParameters));
}
虽然不起作用!我过去常常在我的动作上有这样的参数:
public ActionResult Search(string searchQuery, string listingType)
有效(显然单元测试会尝试使用两个参数(字符串)而不是这一个对象映射到搜索。
有没有人知道如何解决问题,而不是回到将所有属性都写为参数。 mvc属性的自动化摇滚,但我希望有一些方法我可以让mvccontribs testhelper也可以使用它。
答案 0 :(得分:1)
我看了这段代码已经有一段时间了,但我相信它会对您发送的参数进行.Equals调用。对于原始类型,这很容易,但对于参数对象,尝试实现Equals重写并让它测试每个属性的相等性。