【问题标题】:Making mvccontrib testhelper work with actions that get route data automapped to objects使 mvccontrib testhelper 与将路由数据自动映射到对象的操作一起工作
【发布时间】:2010-01-29 12:06:42
【问题描述】:

这是 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 也可以使用它。

【问题讨论】:

    标签: asp.net-mvc mvccontrib mvccontrib-testhelper


    【解决方案1】:

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

    【讨论】:

    • 我认为你是对的。这有点痛苦,坦率地说,我想我会跳过 ShouldMapTo 而不是 sniff
    猜你喜欢
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多