Что лучше?Юнит-тестовый проект для решения или для проекта? - PullRequest
24 голосов
/ 04 марта 2011

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

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

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

Что такое правильный способ?

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

Ответы [ 5 ]

24 голосов
/ 05 марта 2011

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

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

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

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

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

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

9 голосов
/ 04 марта 2011

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

2 голосов
/ 13 апреля 2011

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

1 голос
/ 04 марта 2011

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

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

1 голос
/ 04 марта 2011

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

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