Как запустить тесты Nunit в качестве задачи после сборки в Visual Studio? - PullRequest
0 голосов
/ 21 января 2020

У меня есть решение в Visual Studio с кучей проектов под ним. Некоторые из этих проектов являются тестовыми проектами, содержащими только тесты и код, относящийся к тестам. Для этих проектов я хочу настроить событие после сборки, которое запускает тесты для каждого такого тестового проекта. Я исследовал это, но не нашел никаких вопросов, которые бы точно задавали то, что я спрашиваю - см. Ниже. У меня уже есть платформа nunit, установленная в Visual Studio через nuget, и я уже могу запускать тесты nunit из проводника тестов VS.

Примечания

  • Почему я это делаю? Ну, у нас пока нет времени на настройку непрерывной интеграции или сервера сборки. Я просто хотел что-то быстрое, что провалило бы сборку решения, если какие-либо тесты не пройдут. В частности, в нашем решении есть проект Wix, который собирается последним, и это зависит от всех других проектов. Так что, если пост-сборка в любом из них завершится неудачно, произойдет сбой сборки Wix. Это то, что мы хотим: мы не хотим, чтобы Wix создавал MSI, если не пройдут все тесты.
  • Я уже понял это, но хочу поделиться знаниями с другими (https://stackoverflow.blog/2011/07/01/its-ok-to-ask-and-answer-your-own-questions/) и также посмотрите, есть ли лучший способ сделать это.
  • Пробовал и тестировал в VS2019, но, вероятно, относится и к другим версиям

Ссылки

Здесь спрашивается, как запустить mstest как пост-сборку, а не как nunit: Использование события пост-сборки для выполнения модульных тестов с MS Test в. NET 2.0 +

This спрашивает, как запустить nunit из VS, но не как после сборки: Как запустить тесты NUnit в Visual Studio 2017?

1 Ответ

1 голос
/ 21 января 2020

Первое, что вам нужно сделать, это установить nunit.consolerunner, если у вас его еще нет. Установите это через NuGet в VS. После этого вы можете приступить к написанию сценария после сборки для каждого тестового проекта.

К счастью, скрипт пост-сборки не должен меняться в зависимости от проекта. На самом деле, это вообще не должно меняться, если NuGet помещает nunit.consolerunner в ожидаемое место. Сценарий будет работать как в конфигурации отладки, так и в конфигурации выпуска, поскольку свойства TargetDir и TargetFileName из VS передаются в консоль в виде параметров. Вот сценарий, вам просто нужно вставить его в раздел после сборки событий сборки на панели свойств соответствующего проекта:

cd %HOMEPATH%
cd ".nuget\packages\nunit.consolerunner\3.10.0\tools"
nunit3-console.exe $(TargetDir)$(TargetFileName) --where "cat == Unit"  --work=$(TargetDir)\..

Различные части этого можно объяснить следующим образом:

  • cd %HOMEPATH% сделано потому, что nuget обычно устанавливается в вашу директорию пользователя
  • cd ".nuget\packages\nunit.consolerunner\3.10.0\tools Если предположить, что .nuget существует в вашей директории пользователя, он переместится в расположение консоли запуска nuget .exe файл
  • nunit3-console.exe Это исполняемый файл, который запускает ваши тесты
  • $(TargetDir)$(TargetFileName) Это полный путь к DLL, содержащей ваши тесты, созданные с использованием переменных VS в окне свойств.
  • --where "cat == Unit" Это необязательное ограничение, которое мы использовали для ограничения наших тестовых заданий категорией модульных тестов. Вы можете опустить это - это просто показать вам, как вы можете ограничить категории, если хотите. Смотрите документы (ссылка ниже) для получения дополнительной информации. Примечание: категория «Единица» была нашей собственной аннотацией, которую мы добавили. Это не что-то из коробки. Поэтому, если вы действительно добавите это ограничение без аннотирования ваших тестов, ничего не запустится!
  • --work=$(TargetDir)\.. Это поместит файл TestResult. xml в родительскую папку библиотеки DLL для проекта, который вы создаете. Для VS2019, в любом случае, в данный момент этот каталог является папкой bin в основной папке проекта. Мы использовали это, потому что нам нужно было перенаправить тестовый вывод. В противном случае несколько проектов в одном решении пытались записать в один и тот же файл по умолчанию и не выполнялись из-за проблем с параллелизмом.

Ссылки

Документы по работе с консолью Nunit : https://github.com/nunit/docs/wiki/Console-Command-Line

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