Заставить mvccontrib testhelper работать с действиями, автоматически привязывающими данные маршрута к объектам - PullRequest
1 голос
/ 29 января 2010

Это 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 и listType с двумя свойствами объекта 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)

, который сработал (очевидно, что unittest попытается сопоставить Поиск с двумя параметрами (строками) вместо этого одного объекта.

Кто-нибудь имеет представление о том, как решить проблему, если не считать возврата всех свойств в качестве параметров. Mvc autopping свойств рушится, но я надеюсь, что есть какой-то способ, с помощью которого mvccontribs testhelper может работать и с этим.

1 Ответ

1 голос
/ 01 февраля 2010

Прошло много времени с тех пор, как я посмотрел этот код, но я считаю, что он вызывает .Equals для параметра, который вы отправляете. Для примитивных типов это легко, но для объекта параметров попробуйте реализовать переопределение Equals и проверить его на равенство каждого из свойств.

...