Средства запуска тестов/адаптеры на основе Visual Studio и Nuget

Недавно я узнал об адаптере/бегуне на основе nuget (http://xunit.github.io/docs/running-tests-in-vs.html)

Я пытался понять, как эти бегуны/адаптеры распознаются Visual Studio, а затем используются TestWindow.

Например, если я устанавливаю пакет nuget «xunit.runner.visualstudio», все тесты на основе xUnit в моем проекте обнаруживаются и отображаются в окне «Тест».

Я пытаюсь понять, как VS перехватывает Test Discovery, используя пакет, установленный в папке пакетов?

Где и как подключаются адаптеры на основе VS и nuget?

Я пытался найти эту информацию, но мой гугл-фу подвел меня. :(

Я проверил ответ на вопрос (Пользовательский тестовый адаптер, установленный через NuGet, не не обнаруживает тесты) и говорит, что VS копирует пакеты по пути %TEMP%\VisualStudioTestExplorerExtensions, но это почти все.


person Chandu    schedule 01.04.2015    source источник
comment
Сам задавался тем же вопросом, я пошел проверить код запуска xunit в github: github.com/ xunit/visualstudio.xunit   -  person Benjol    schedule 18.02.2016


Ответы (1)


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

  1. Вы создаете проект, который ссылается на пакет с именем Sample.TestAdapter.
  2. VS копирует каталог Sample.TestAdapter из пакетов в %TEMP%\VisualStudioTestExplorerExtensions.
  3. Что-то запускает тестовое обнаружение — перестроение всегда происходит, иногда инкрементные сборки тоже. vstest.console.exe здесь полезен для отладки.
  4. VS запускает vstest.discovery.exe, который ищет в VisualStudioTestExplorerExtensions сборку, реализующую ITestDiscoverer.
  5. Если ITestDiscoverer найден, VS вызывает его со списком сборок, которые могут содержать тесты.
  6. Обнаруженные тесты отправляются обратно в VS вашим тестовым адаптером.

Итак, насколько я могу судить, это довольно простая архитектура плагинов, основанная на отражении. Надеюсь, это поможет.

person thebeekeeper    schedule 01.04.2015
comment
Спасибо за быстрый отзыв. Я подожду пару дней, чтобы узнать, есть ли еще отзывы от других, прежде чем принять ответ. - person Chandu; 02.04.2015