1

这是 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 项目并喜欢 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 也可以使用它。

4

1 回答 1

1

自从我查看此代码以来已经有一段时间了,但我相信它会对您发送的参数进行 .Equals 调用。对于原始类型,这很容易,但对于参数对象,请尝试实现 Equals 覆盖并让它测试每个属性的相等性。

于 2010-02-01T17:23:47.403 回答