Кто устанавливает RouteData с помощью ASP.NET/MVC + MvcMockHelpers + RhinoMocks? - PullRequest
2 голосов
/ 11 сентября 2009

Я пытаюсь написать тест для метода контроллера ASP.NET MVC. У меня есть RhinoMocks (так как он кажется самым популярным и наиболее поддерживаемым), и MvcMockHelpers (поскольку мне кажется, что мне это нужно).

Мой метод испытаний выглядит так:

var controller = new MyController();
MvcMockHelpers.SetFakeControllerContext(mocks, controller);
mocks.ReplayAll();
var result = controller.MyAction(arg1, arg2);
// then i'd make assertions on the result

Это не работает, потому что RouteData не имеет записей, а MyAction зависит от наличия множества значений, таких как «controller» и «action».

Я знаю, что могу создать пользовательские данные RouteData для каждого метода контроллера, который я хочу вызвать, но это кажется глупым. Какая часть ASP.NET MVC отвечает за настройку этого параметра и как я могу получить этот путь к коду?

(Я чувствую себя совершенно потерянным, поэтому, если я лаю не на том дереве, дайте мне знать об этом тоже.)

Ответы [ 3 ]

1 голос
/ 12 сентября 2009

Мне повезло с MvcContrib Test Helper, который использует RhinoMocks.

Это приличное вступление

И проект MVC Contrib включен CodePlex

0 голосов
/ 12 сентября 2009

Может быть интересен способ построения и тестирования маршрутов CodeCampServer.

RouteConfigurator: (обратите внимание, что он очищает маршруты при каждом вызове RegisterRoutes () - требуется для помощника по тестированию маршрута MVCContrib) http://code.google.com/p/codecampserver/source/browse/trunk/src/UI/RouteConfigurator.cs

IncomingRouteTester: использует расширения тестирования маршрута MVCContrib для эффективного тестирования маршрутов: http://code.google.com/p/codecampserver/source/browse/trunk/src/UnitTests/UI/Routes/IncomingRouteTester.cs

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

0 голосов
/ 12 сентября 2009

Я предлагаю разделить тестирование вашего модуля на тесты маршрутизации и тесты контроллера. Тесты маршрутизации будут проверять маршруты независимо от контроллеров. Это освобождает вас от обычного тестирования ваших контроллеров, как и любой другой простой метод CSharp.

Фил Хаак и Адам Тибор имеют хорошие статьи о том, как проверить ваши маршруты:

Тестирование маршрутов в ASP.NET MVC
http://haacked.com/archive/2007/12/17/testing-routes-in-asp.net-mvc.aspx

Тестирование маршрутов с использованием Moh Rhino
http://abombss.com/blog/2007/12/10/ms-mvc-testing-routes/

...