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

Лучшая практика: организация тестов единиц

У меня есть решение s > 270 проектами, оно содержит различные папки и т.д. Представьте, что каждый проект имеет Unit Tests, как вы думаете, что является лучшим способом их организовать? Если у каждого проекта есть тесты на единицу, или я должен создать для них специальную папку или даже другое решение для только модульных тестов.

Как вы организуете их для таких крупных решений/проектов?

4b9b3361

Ответ 1

У вас должен быть один (или более) unit test проектов для целевого проекта. Это единственный способ сохранить гибкость и варьировать каждый пакет unit test вместе с целевым проектом.

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

Если вам нужно разделить тестовый код между несколькими целевыми объектами, вы всегда можете создать общую библиотеку с обобщенным API-интерфейсом повторного использования, если он не ссылается ни на один из целевых проектов.

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

Ответ 2

Единственное решение с 270 проектами звучит как проблема для начала. Сколько времени нужно, чтобы открыть VS?:) (Серьезно, можете ли вы объединить некоторые проекты вместе или разделить решение?)

Обычно я выполняю модульные тесты в своем собственном проекте, но в том же решении. В рамках проекта зеркалируйте структуру каталога/пространства имен производственного проекта. Посмотрите, как Noda Time организовано для примера. Я был в компаниях, где их держали в отдельном решении, но это было очень больно. (У них была хорошая причина: тесты были в VS2005, а производственный код - в 2003 году.)

Иногда я устанавливал пространство имен по умолчанию тестового проекта как то же, что и производственный проект, что более важно в Java, чем в .NET(поскольку он позволяет вам получить доступ к элементам доступа к пакету), но он все равно может быть полезен поскольку это означает, что класс, который вы собираетесь тестировать, не нужно импортировать.

Ответ 3

После перехода на Gallio из встроенной инфраструктуры тестирования Visual Studio я начал сдавать свои тесты в тестовую папку в том же проекте. Для маленьких вспомогательных классов я мог бы даже определить unit test прямо в той же папке. Пока ваши пространства имен относительно невелики (мне не нравятся разрозненные папки пространства имен), это не добавляет слишком много беспорядка для меня. В любом случае, позже, когда эти классы были на некоторое время и стабильны, вы можете переместить эти модульные тесты в отдельную папку.