Организация проекта модульного тестирования для крупных решений - PullRequest
5 голосов
/ 24 января 2012

Мне нужно добавить модульные тесты для существующего решения с большим количеством проектов. Сборка проекта занимает много времени, поэтому я решил создать еще одно отдельное решение для проектов модульного тестирования. Я не знаю, что лучше: ссылка на dll или включение в решения модульного тестирования существующих проектов, которые я хочу протестировать.

Как мне организовать свои тесты и почему? Пожалуйста, основывайте ответы на собственном непосредственном опыте.

Ответы [ 3 ]

4 голосов
/ 24 января 2012

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

3 голосов
/ 24 января 2012

Сергей, как отмечает Даниэль Хилгарт, желательно включить проекты модульного тестирования в ваше основное решение. Кроме того, желательно иметь соотношение 1: 1 между вашими проектами разработки и проектами модульного тестирования.

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

Один проект, над которым я недавно работал, содержал 97 проектов! Время сборки составило более 10 минут. Благодаря объединению кода в меньшее количество проектов время компоновки было сокращено до 2 минут для одного и того же LOC.

Производительность разработчика, потерянная за счет «правильности», может быть очень дорогой в долгосрочной перспективе. Это не только потерянное время сборки, но и время, потерянное из-за перерыва в концентрации, раздражения со стороны разработчика и т. Д. Сколько раз вы лично были остановлены медленной сборкой / компьютером / IDE и оказались в конечном итоге просматривая веб-страницы, теряя 10 минут, прежде чем вы поймете: «О, сборки закончены!». Я был в такой ситуации настолько плохой, что время, проведенное между сборками, было потрачено на просмотр веб-сайтов вакансий; -)

В качестве обходного пути для больших решений я сделал это.

  • Создание одного решения для облегченного разработчика (только для проектов dev)
  • Создайте еще один для тех же dev-проектов плюс юнит-тесты.
  • Держите оба экземпляра Visual Studio открытыми во время разработки. Таким образом, я получаю короткий цикл сборки / запуска / отладки для разработки, но могу проверить состояние тестов (компиляция, выполнение) в любое время.
  • Когда приходит время регистрации, я гарантирую, что проект dev + unit test будет собран, тесты пройдены, и я зарегистрировался.

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

И последнее замечание. Рассматривали ли вы создание командного файла консоли для сборки Team City на локальных компьютерах разработчиков? Это может быть выполнено как последний шаг перед регистрацией, чтобы гарантировать, что разработчики проверяют код, который строит и передает в соответствии с настройкой TC.

С уважением,

2 голосов
/ 24 января 2012

Как сказал Даниэль, ссылки на проекты были бы моим предпочтительным подходом.

Если вы хотите сократить время, необходимое для локальной сборки, рассмотрите возможность использования расширения Solution Load Manager , чтобы контролировать, какие проекты загружены, а какие нет. Это действительно может помочь сократить время сборки, когда вы работаете только над подмножеством очень большого решения.

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