0

У нас есть приложение ASP.NET WebForms, которое мы собираемся преобразовать в приложение ASP.NET MVC - одна из причин заключается в том, что мы можем в полной мере воспользоваться преимуществами Unit Testing и TDD.Модульное тестирование приложения ASP.NET MVC 3

В настоящее время наше приложение WebForms активно использует HttpModules. В настоящее время мы обсуждаем, следует ли придерживаться HttpModules или использовать Global Filters (любой совет здесь будет замечательным).

Тем не менее, с моими «MVC-приложениями» «привет мир», я не разработал, как запустить код HttpModule (или действительно Глобальный фильтр), когда запускается Unit Unit.

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

Любое руководство было бы очень желанным.

Благодаря

Griff

PS - я добавил следующее после первоначальных ответов на мой вопрос.

Простой выдуманные Use Case

В производстве

  1. браузер делает запрос для метода контроллера
  2. HttpModule пожаров (или Global Filter) - это устанавливает статический Guid свойство имеет ценность.
  3. Метод контроллера принимает это значение Guid и использует его в своей последующей логике
  4. Правильного результата затем возвращается в браузер

В модульном тестировании

  1. тест блок вызывает то же самое Метод контроллера
  2. HttpModule (или глобальный фильтр) не срабатывает - свойство static Guid имеет значение Guid.Empty
  3. Метод контроллер принимает это значение Guid, но выдает ошибку, потому что это был пустой Guid
  4. тест
  5. устройство не

Мои мысли:

  • если контроллер полагается на HttpModule (или Глобальный фильтр) для запуска сначала, тогда HttpModule является зависимостью, и поэтому результаты его действия должны быть обрезаны, чтобы тест был истинным. Модуль Тест.
  • Если тест должен включать в себя действие HttpModule (или Глобального фильтра) для запуска, то это будет Интеграция тест (хотя пока неясно, как получить HttpModule или Global Filter для запуска как часть теста интеграции)
  • HttpModule (или Global Filter) должен иметь свой собственный набор модульных тестов

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

Проблема, поскольку я вижу, что мой проект TEST становится проектом «запуска» при выполнении моих тестов, поэтому HttpModules (определенные в файле web.config MVC ASP.NET MVC) и глобальные фильтры (определенные в файл global.asax ASP.NET MVC) не будет запущен, потому что файлы web.config и global.asax не будут выполнены. Поэтому остается вопрос: как мне заставить их работать в моем тесте интеграции?

Спасибо всем

Griff

ответ

2

ли не называть HttpModule или Global Filter обрабатывается Framework. Вы не должны беспокоиться о том, как тестировать объекты, которые обрабатываются Framework. Тесты вашего устройства должны только проверять, что ваш HttpModule или Глобальный фильтр ведут себя правильно при вызове.

+0

Hi Justin - спасибо за ваш ответ. Я добавил Случай использования к моему оригинальному сообщению, чтобы еще больше объяснить ситуацию - буду признателен за ваши отзывы. Griff – DrGriff

4

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

Вместо этого следует просто протестировать, чтобы убедиться, что применяется глобальный фильтр.

+0

Привет Хаттан - спасибо за ваш ответ, который подтверждает то, что сказал Джастин. Тем не менее, я расширил свой первоначальный пост с помощью модифицированного примера использования, и я также ценю ваши мысли по этому поводу. Griff – DrGriff

1

Я бы издевался над модулями http и хранилищами для модульного тестирования контроллеров и служб, на мой взгляд, это то, как вы тестируете устройство. глобальные фильтры и httpmodules, которые вы можете протестировать с помощью тестов конца года. Надеюсь, поможет.

+0

Hi Teahupoo - файл web.config ASP.NET MVC определяет, какие HttpModules будут запускаться, так же, как файл Global.ASAX ASP.NET определяет, какие глобальные фильтры будут срабатывать. Тем не менее, при выполнении моих тестов проект ASP.NET MVC НЕ является проектом запуска, теперь это фактически сборка библиотеки, которая вызвана моим проектом TEST, поэтому файлы web.config и global.asax не выполняются. Итак, остается вопрос - как заставить их работать в моем тесте интеграции? – DrGriff

+0

Вам нужно проверить контроллеры? Идея состоит в том, чтобы создать сервисный уровень и протестировать только уровни обслуживания без необходимости тестирования контроллеров. –

+0

Наша цель - попытаться получить покрытие 100% кода в наших тестах, а для некоторых из тестов интеграции включить контроллеры (хотя, по общему признанию, контроллеры должны содержать очень мало логики). – DrGriff