Вы помещаете модульные тесты в тот же проект или другой проект?

Теперь это:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    Database.SetInitializer<YourDbContext>(null);
    base.OnModelCreating(modelBuilder);
}

в вашем файле YourDbContext.cs.

134
задан Andrii Nemchenko 9 May 2012 в 11:10
поделиться

8 ответов

По-моему, модульные тесты должны быть помещены в отдельный блок из производственного кода. Вот всего несколько недостатков помещающих модульных тестов в том же блоке или блоках, как производственный код:

  1. Модульные тесты поставляются с производственным кодом. Единственной вещью, поставленной с кодом продукта, является производственный код.
  2. Блоки будут излишне чрезмерно увеличены в размере модульными тестами.
  3. Модульные тесты могут влиять на процессы сборки как автоматизированная или непрерывная сборка.

Я действительно не знаю ни о каких профессионалах. Наличие дополнительного проекта (или 10) не является доводом "против".

Править: Больше информации о сборке и поставке

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

Подводя итоги, вот общее представление для ежедневной сборки и тестирования и поставки битов и других файлов:

  1. Производственные выполнения сборки, помещая производственные файлы в определенный "производственный" каталог.
    1. Разработайте производственные проекты только.
    2. Скопируйте скомпилированные биты и другие файлы в "производственный" каталог.
    3. Биты копии и другие файлы в каталог предвыпускной версии, иначе Рождественский каталог выпуска был бы "Release20081225".
  2. Если производственная сборка успешно выполняется, выполнения сборки модульного теста.
    1. Производство копии кодирует к "тестовому" каталогу.
    2. Модульные тесты сборки к "тестовому" каталогу.
    3. Выполненные модульные тесты.
  3. Отправьте уведомления о сборке и результаты модульных тестов разработчикам.
  4. Когда предвыпускная версия (как Release20081225) будет принята, поставьте эти биты.
95
ответ дан 23 November 2019 в 23:54
поделиться

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

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

При необходимости в доступе к внутренним членам производственного кода используйте InternalsVisibleTo.

108
ответ дан 23 November 2019 в 23:54
поделиться

Я не понимаю частого возражения на развертывание тестов с производственным кодом. Я вел, команда в небольшом микроограничении (вырос с 14 до 130 человек). У нас была приблизительно полдюжина приложений Java, и мы нашли это ЧРЕЗВЫЧАЙНО valueable для развертывания тестов в поле для выполнения их на определенной машине, которая показывала необычное поведение. Случайные проблемы происходят в поле, и способность бросить несколько тысяч модульных тестов в тайну с нулевой стоимостью была неоценимыми и часто диагностируемыми проблемами в минутах... включая проблемы установки, облупленные проблемы RAM, определенные для машины проблемы, облупленные сетевые проблемы, и т.д., и т.д. Я думаю, что невероятно ценно поместить тесты в поле. Кроме того, случайные проблемы открываются наугад времена, и хорошо иметь модульные тесты, находящиеся там уже ожидающий, чтобы быть выполненным в уведомлении моментов. Пространство на жестком диске является дешевым. Точно так же, как мы пытаемся держать вместе данные и функции (дизайн OO), я думаю, что существует что-то существенно ценное в держании вместе кода и тестов (функция + тесты, которые проверяют функции).

Я хотел бы поместить свои тесты в тот же проект в C#/.NET/Visual Studio 2008, но я все еще не исследовал это достаточно для достижения его.

Одно большое преимущество хранения Foo.cs в том же проекте как FooTest.cs - то, что разработчикам постоянно напоминают, когда класс пропускает одноуровневый тест! Это поощряет лучше методы кодирования, на которых делают пробную поездку... дыры более очевидны.

66
ответ дан 23 November 2019 в 23:54
поделиться

Я колеблюсь между теми же и различными проектами проекта.

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

При помещении тестов в тот же проект я нахожу легче переключиться между тестами и кодом, который они тестируют, и легче осуществить рефакторинг/переместить их вокруг.

3
ответ дан 23 November 2019 в 23:54
поделиться

Мои модульные тесты всегда входят в отдельный проект. На самом деле для каждого проекта я имею в своем решении, существует отдельный тестовый проект, который соглашается с ним. Тестирование кода не является кодом приложения и не должно быть смешано с ним. Одно преимущество для хранения их в отдельных проектах - по крайней мере, использование TestDriven. Сеть - то, что я могу щелкнуть правой кнопкой по тестовому проекту и запустить все тесты в том проекте, тестируя всю библиотеку кода приложения одним щелчком.

10
ответ дан 23 November 2019 в 23:54
поделиться

Я поместил их в отдельные проекты. Название зеркал блока название пространств имен, как правило для нас. Таким образом, если существует проект под названием Компания. Продукт. Feature.sln, это имеет вывод (имя сборки) Company.Product.Feature.dll. Тестовым проектом является Компания. Продукт. Функция. Tests.sln, приводя к Company.Product.Feature.Tests.dll.

Вы лучше всего сохраняете их в едином решении и управляете выводом через Менеджер конфигурации. У нас есть именованная конфигурация для каждого из основных ответвлений (Разработка, Интеграция, Производство) вместо использования Отладки по умолчанию и Выпуска. После того как у Вас есть своя установка конфигураций, можно затем включать или исключить их путем нажатия на флажок "Build" в Менеджере конфигурации. (Для получения Менеджера конфигурации щелкните правой кнопкой по решению и перейдите к Менеджеру конфигурации.) Примечание, что я нахожу, что CM в Visual Studio время от времени багги. Пару раз я должен был войти в проект и/или файлы решения для чистки целей, которые он создал.

Кроме того, если Вы используете Сборку Команды (и я уверен, что другие инструменты сборки.NET являются тем же), можно затем связать сборку с именованной конфигурацией. Это означает, что, если Вы не создаете свои модульные тесты на Вашу "Производственную" сборку, например, проект сборки может знать об этой установке также и не создавать их, так как они были отмечены как таковые.

Кроме того, мы раньше делали, XCopy понижается машины сборки. Сценарий просто опустил бы копировать что-либо названное *.Tests.Dll от того, чтобы быть развернутым. Это было просто, но работало.

3
ответ дан 23 November 2019 в 23:54
поделиться

Отдельные проекты, хотя я дебатирую со мной, должны ли они совместно использовать тот же svn. В данный момент я даю им отдельные репозитории SVN, один названный

"MyProject" - для самого проекта

и один названный

"MyProjectTests" - для тестов, связанных с MyProject.

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

Но я все больше склонен иметь что-то как следующее, в единственном репозитории SVN, для каждого проекта.

MyProject
|\Trunk
| |\Code
|  \Tests
|\Tags
| |\0.1
| | |\Code
| |  \Tests
|  \0.2
|   |\Code
|    \Tests
\Branches
  \MyFork
   |\Code
    \Test

Мне было бы интересно знать то, что другие люди думают об этом решении.

-2
ответ дан 23 November 2019 в 23:54
поделиться

Как другие ответили - помещенные тесты в отдельных проектах

Одна вещь, которая не была упомянута, то, что Вы не можете на самом деле работать nunit3-console.exe против ничего кроме .dll файлы.

, Если Вы - планирование запущения Ваших тестов через TeamCity, это создаст проблему.

Скажем, у Вас есть проект консольного приложения. Когда Вы компилируете, это возвращает исполняемый файл .exe bin папка.

От nunit3-console.exe Вы не смогли бы запустить любые тесты, определенные в том консольном приложении.

, Другими словами, консольное приложение возвращается exe, файл и библиотека классов возвращаются dll файлы.

я просто получил бит этим сегодня, и он сосет :(

0
ответ дан 23 November 2019 в 23:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: