Как выполнить NUnit-тест с использованием пакета NUnit.Runners и psake?

Традиционно nunit-console.exe был включен в репозиторий и на сервер сборки (или на любой другой компьютер), этот EXE был вызван из некоторой сборки script.

Теперь, когда доступен пакет NUnit.Runners, я задаюсь вопросом, как это можно использовать из сборки psake script. Это пакет на уровне решения, поэтому он не оставляет никаких следов в packages.config и не может быть автоматически восстановлен как другие пакеты на уровне проекта, поэтому я думаю, что нужно было бы вызвать Install-Package из psake script, подождать для загрузки, а затем выполнить модульные тесты? Надеемся, что эту загрузку можно запустить только один раз, и она не будет замедлять сборку каждый раз, когда она запускается. Или это будет?

Ответы

Ответ 1

Просто наткнулся на это сам. Довольно легко исправить следующее:

  • Получить последнюю версию расширения Nuget Package Manager. Сейчас я на 1.8.
  • Добавьте пакет Nunit.Runners в ваше решение.
  • Скопируйте элемент, связанный с бегуном, из пакета pack.config под вашей .nuget-папкой в ​​файл packages.config вашего проекта unit test

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

У меня это работает в небольшом проекте, который я сделал для TeamCity для освещения Github. Packages.config в проекте unit test был изменен, как обсуждалось выше. Вы можете посмотреть файл MSBuild, чтобы узнать, как я запускаю тесты из командной строки. (build.proj, который ссылается на некоторые цели и свойства, содержащиеся в инструментах репозитория \msbuild). Вам понадобится последний Nuget Package Manager, установленный до того, как вы попытаетесь построить VS.NET или из командной строки (clicktobuild.bat).

Вы должны уметь переносить идею о том, как легко запускать консоль Nunit из нужного места в psake.

Ответ 2

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

Измените файл nuget.targets со следующими изменениями:

В <PropertyGroup Condition=" '$(OS)' == 'Windows_NT'"> добавьте этот элемент:

<SolutionLevelPackagesConfig>$([System.IO.Path]::Combine($(SolutionDir), ".nuget\packages.config"))</SolutionLevelPackagesConfig>

В <PropertyGroup> добавьте этот элемент:

<RestoreSolutionLevelCommand>$(NuGetCommand) install "$(SolutionLevelPackagesConfig)" -source "$(PackageSources)"  $(RequireConsentSwitch) -solutionDir "$(SolutionDir) "</RestoreSolutionLevelCommand>

В <Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites"> добавьте этот элемент перед RestoreCommand для WinNT:

<Exec Command="$(RestoreSolutionLevelCommand)"
              LogStandardErrorAsError="true"
              Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)') And Exists('$(SolutionLevelPackagesConfig)')" />

Это сделало мой msbuild для восстановления пакетов уровня решения.

Ответ 3

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

NUnit 2.5.10.11092 все еще имеет nunit exe в пакете nuget.