Подтвердить что ты не робот

Что лучше? Проект модульного тестирования на решение или на проект?

Лучше ли иметь проект по единичному тестированию на решение или проект единичного тестирования для каждого проекта?

В каждом решении, если у вас есть 5 проектов в решении, вы получаете 1 проект с единичным тестированием, содержащий тесты для каждого из 5 проектов.

Для каждого проекта, если у вас есть 5 проектов в решении, вы получаете 5 проектов с единичным тестированием.

Каков правильный путь?

Я думаю, что это не тот же вопрос, что и Write Unit тесты в сборку или в отдельной сборке?

4b9b3361

Ответ 1

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

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

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

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

В небольших проектах, где проектов не так много, соотношение 1:1 обычно является предпочтительным. Однако производительность Visual Studio быстро ухудшается по мере увеличения количества проектов. Около 40 компиляции метки проекта становятся препятствием для компиляции и запуска тестов, поэтому более крупные проекты могут выиграть от консолидации тестовых проектов.

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

Ответ 2

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

Ответ 3

Мы имеем отношение один к одному от файла к проектам решения в очень большой системе, мы достигли точки, когда сборка занимает более 90 минут каждый раз, когда мы регистрируемся. Я создал новую конфигурацию решения, которая строит только тестовые проекты, новые настройки запускаются один раз в сутки, чтобы убедиться, что все тестовые примеры работают, разработчики могут переключиться на unittest config, чтобы проверить свой код в своей среде разработки. Pl. дайте мне знать ваш канал назад

Ответ 4

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

Ответ 5

Я собираюсь с одним из ответов "это зависит". Лично я, как правило, ставил все тесты в одном проекте с отдельными папками в проекте для каждой сборки (плюс дополнительные подпапки по мере необходимости). Это позволяет легко запускать весь набор, либо из VisualStudio, либо с помощью CruiseControl.net.

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