Ускорение модульных тестов ASP MVC - PullRequest
4 голосов
/ 22 сентября 2009

Как люди запускают свои автоматизированные тесты для ASP MVC?

В настоящее время мы используем собственные модульные тесты Visual Studio и выполняем их линейно на одной машине. Они слишком медленные, чтобы быть полезными в настоящее время.

Переключение на монахиню? Распространение юнит-тестов с Incredibuild XGE? Кто-нибудь пробовал эти или есть другие идеи?

Спасибо.

Ответы [ 4 ]

4 голосов
/ 22 сентября 2009

Проблема с MSTest не в самой скорости работы, а в самой тестовой среде. Вы можете запускать тесты MSTest с помощью Resharper, и они довольно быстрые. Мои тесты выполняются с интерфейсом репозитория, и я вызываю репозиторий в памяти при вызове контроллеров.

Тем не менее, тесты вашего контроллера должны быть очень легкими: тип возвращаемого значения (ViewResult, JsonResult) и тип модели. Не более

3 голосов
/ 22 сентября 2009

В большинстве случаев вы видите, что MSTests запускает сервер разработки ASP.NET каждый раз, когда вы хотите запустить хотя бы один тест.

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

При издевательстве над контроллерами я не вижу причины, по которой вы не можете удалить атрибуты, которые говорят системе тестирования запустить сервер разработки. В конце концов, разве не цель насмешки убрать «внешние» компоненты?

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

Что касается представлений, я бы не стал писать для них модульные тесты. Сохраняйте их максимально тонкими и проверяйте их вручную путем визуального осмотра.

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

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

На скорость теста влияют несколько факторов - они, будучи MSTest, могут быть только одним из них.

На скорость теста может влиять любое из следующих действий:

  • Тесты, которые фактически выполняют доступ к БД
  • Тесты, которые зависят от доступа к диску (например, чтение web.config)
  • Код, который фактически не работает (например, выполняет бесчисленное количество ненужных циклов, других лазеек производительности)
  • Тесты, которые делают слишком много (тестирование для нескольких вещей одновременно) или на самом деле не тестируют юнит

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

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

изменение структуры модульного тестирования не принесет вам никакой пользы

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

Я предлагаю вам использовать CI для запуска всех тестов, а также отдельных тестов, например, уровень пользовательского интерфейса должен иметь свои тесты отдельно от тестов доступа к данным ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...