Организация модульных тестов в Visual Studio
-
18-09-2019 - |
Вопрос
В настоящее время я создаю парную сборку модульного тестирования для каждой сборки в моем проекте, обе находятся в одной папке.
- Мой проект/MyProject.csproj
- MyProject.Test/MyProject.Test.csproj
Рассматривая проекты с открытым исходным кодом, я видел, что некоторые проекты меньшего размера помещали все тесты в одну сборку, а другие разделяли ее, как у меня.Я имею дело с большим решением, поэтому было бы довольно безумно помещать все тесты в один проект.
В настоящее время у меня есть логика msbuild для запуска тестов для всех файлов *.Test.csproj.Если бы у меня были все мои тесты в другой папке, мне бы не нужно было этого делать.
Просто интересно, есть ли какие-нибудь веские аргументы для того, чтобы поступать определенным образом.
Спасибо
Решение
Я делаю это таким же образом но Я изменяю пространство имен по умолчанию для каждого тестового проекта, чтобы оно соответствовало пространству имен производственного проекта.Итак, тесты для класса X.Y.Foo
находятся в X.Y.FooTest
вместо того , чтобы X.Y.Test.FooTest
- это означает, что вам нужно меньше использовать директивы, и в целом все упрощается.
Моя главная причина, по которой я хочу сохранить эти два проекта в отдельных проектах, заключается в том, чтобы избежать включения тестов в производственную библиотеку или необходимости отправлять непроверенную библиотеку.Благодаря отдельной структуре проекта вы можете запускать модульные тесты для всего, что вы создаете.Это также упрощает просмотр только производственных классов без необходимости просматривать в два раза больше файлов (при получении "ощущения" библиотеки).
Наконец, не забывайте, что если вам нужно получить доступ internal
участники при тестировании всегда есть [InternalsVisibleTo]
.
Другие советы
Я предлагаю создавать как можно меньше проектов модульного тестирования.Причина в том, что каждый созданный вами файл увеличивает время компиляции как минимум на десять секунд.В большом проекте все начинает складываться.
Вот структура каталогов, которую я использую:
Имяпроекта/ветви/ магистраль/проекты/код/codeproject1
Имяпроекта/ветви/ магистраль/проекты/код/codeproject2
Имяпроекта/ветви/ магистраль/проекты/код/codeproject3
Имяпроекта/ветви / магистраль/проекты/ Тесты/testproject1
Имяпроекта/ветви/ магистраль/ Зависимости
Имяпроекта/прототипы
Имя проекта/...
и внутри testproject1 следующая структура каталогов:
кодпроект1/
кодпроект2/
codeproject2/веб-проект
codeproject2/web/mvc
кодпроект3/
codeproject3/поддержка
Я делаю то же самое, за исключением того, что каждый проект находится в своей собственной папке в той же корневой папке.Что-то вроде следующего:
Папка с решением
- Папка ProjectA ( проект )
- Проект.Папка для тестов
- Папка ProjectB
- ProjectB.Папка для тестирования
У меня всегда есть отдельный тестовый проект для каждого проекта.Отчасти это просто потому, что мне нравится ее организация, но я также часто сталкивался с ситуациями, когда я решал разбить библиотеку на собственное решение, чтобы ее можно было повторно использовать в других решениях.В этих случаях наличие в проекте библиотеки собственного отдельного тестового проекта (а не всех тестов в одном проекте) значительно упрощает разбиение этой библиотеки.