Почему Visual Studio 2015/2017/2019 Runner не обнаруживает мои тесты xUnit v2

173

ОБНОВЛЕНИЕ: добавление 2019; механизм интеграции обнаружения / бегуна такой же, как и в 2017 и 2015 годах, поэтому ключевые вещи, которые могут пойти не так, одинаковы.


Я прочитал, почему бегун xUnit не находит мои тесты, что объясняет причины, по которым xUnit никогда не сможет найти ваши тесты, но моя проблема в другом - я уверен, что с моими тестами не происходит ничего тонкого; (они работали в других средах, это , кажется, только моя машина) - Визуальный Studio Test Runner в Visual Studio 2015 [Community Edition] просто не показывает какой - либо из моих тестов. Я не делаю ничего отдаленно захватывающего; тесты нацелены на xUnit.net v2 на рабочем столе.

Я посмотрел в окне «Вывод» и вообще ничего не вижу в разделе « Тест» на вкладке « Показать вывод» .

Рубен Бартелинк
источник
связанные: stackoverflow.com/questions/16214684/…
Рубен Бартелинк
1
Это только одна из возможных проблем, но, очевидно, вам нужно скомпилировать тестовый проект, прежде чем он будет показан в тестовом проводнике.
Никлас Петр
связанные: stackoverflow.com/a/29589576/6913871
Рубен Бартелинк
Это сработало для меня - stackoverflow.com/questions/42861930/…
Заключенный ZERO
Установка Xunit.Runner.VisualStudio решила мою проблему
Бендрам

Ответы:

210
  1. Устранить исключения обнаружения из ваших запросов; перейдите в окно вывода (Ctrl-Alt-O), затем переключите вывод шоу из раскрывающегося списка (Shift-Alt-S) на тесты и убедитесь, что нет исключений для обнаружения

  2. Тест | Настройки теста | Архитектура процессора по умолчанию может помочь, если ваши тесты специфичны для x86 / x64 и обнаружение вызывает исключения, связанные с битрейтом, то есть не AnyCpu

  3. Как предложено в этом ответе (обоснуйте его, если техника помогает), запуск бегунка консоли на рабочем столе ( инструкции ) может быть хорошей перекрестной проверкой, чтобы исключить другие возможности, например искаженные файлы конфигурации:

    packages\xunit.runner.console.2.2.0\tools\xunit.console <tests.dll>

    ПРИМЕЧАНИЕ. xunit.runner.consoleПакет устарел: когда вы работаете с VS, вы сможете dotnet testзапускать их и в контексте CI.


Пойдите, прочитайте документацию - это всесторонне, актуально, включает информацию об устранении проблем и берет PR: -

Важное примечание: если вы ранее установили xix-nun.net Visual Studio Runner VSIX (расширение), сначала необходимо удалить его. Бегунок Visual Studio теперь распространяется только через NuGet. Чтобы удалить его, зайдите в Инструменты > Расширения и обновления . Прокрутите список до конца и, если xUnit.net установлен, удалите его. Это заставит вас перезапустить Visual Studio.

Если у вас возникают проблемы с обнаружением или выполнением тестов, вы можете стать жертвой поврежденного кэша бегуна в Visual Studio. Чтобы очистить этот кэш, закройте все экземпляры Visual Studio и удалите папку %TEMP%\VisualStudioTestExplorerExtensions. Также убедитесь, что ваш проект связан только с одной версией пакета NuGet для бегуна Visual Studio ( xunit.runner.visualstudio).

Следующие шаги работали для меня:

  1. (Только если вы подозреваете, что на вашей машине серьезный беспорядок - в общем случае более распространенным случаем является то, что интеграция с Visual Studio просто еще не установлена)

    Сделайте, DEL %TEMP%\VisualStudioTestExplorerExtensionsкак советовали: -

    PS> del $env:TEMP\VisualStudioTestExplorerExtensions

  2. Установите пакет NuGet xunit.runner.visualstudioво всех тестовых проектах

    • Paket:

      .paket\paket add nuget xunit.runner.visualstudio -i

      Вы должны в конечном итоге со следующимpaket.dependencies :

      nuget xunit.runner.visualstudio version_in_path: true

      Обратите внимание, что version_in_path: trueбит важен

    • Nuget: перейдите в консоль диспетчера пакетов (Alt-T, N, O) и

      Install-Package xunit.runner.visualstudio)

    Перестройте, чтобы убедиться, что в xunit.runnerконечном каталоге

  3. Закрыть Test Explorer <- это был пропущенный бит для меня

  4. Повторно открыть Test Explorer (Alt-S, W, T)

  5. Запустить все тесты (Ctrl R, A)

Рубен Бартелинк
источник
12
«Close Test Explorer <- это был пропущенный бит для меня». Это самый важный шаг, который я тоже пропустил и потратил 5 часов, чтобы разобраться. Спасибо, я должен был обратить внимание на шаги :)
Esen
1
бегун xunit VS работал на моего слона. Тем не менее, он перестал появляться однажды. Обнаружил, что я не установил работающую VS, и она работала, вероятно, из-за кеша, оставленного другим sln, на котором установлен бегун. После установки бегуна все снова работает нормально. Так что не забудьте установить бегунок для каждого SLN.
ZZZ
1
Это невероятно. Удаление папки, в которой было три других пустых папки, устранило проблему.
t3chb0t
1
@martinJH Я сам ответил на это (ссылка в OP): - stackoverflow.com/questions/16214684/… ;) Не раскрывая, как я это обнаружил
Рубен Бартелинк
1
Действительно странные вещи, но удаление %TEMP%\VisualStudioTestExplorerExtensionsи перезапуск VS наконец-то сработали!
Хинрих
35

Мне пришлось изменить параметры теста после изменения процессора тестовых проектов на x64. Затем тесты были обнаружены снова.

Архитектура

Максимум
источник
Вы видели сообщение до этого в тестовом выводе обнаружения?
Рубен Бартелинк
Нет, я не видел никаких ошибок, потребовалось время, чтобы выяснить.
Макс
хмм; странно (см. в верхней части моего ответа - оно объясняет, где искать; обычно это помечено (хотя бывают случаи def, когда нигде просто нет сообщений))
Ruben Bartelink
Это исправило это для меня. Я не знаю, почему это помогает, но это помогает.
VSO
2
Я должен был очистить -> восстановить после изменения.
user2023861
32

Ни одно из вышеперечисленных решений не помогло мне (dotnetcore 1.1, VS2017). Вот что это исправило:

  1. Добавить пакет NuGet Microsoft.TestPlatform.TestHost
  2. Добавить пакет NuGet Microsoft.NET.Test.Sdk

Это в дополнение к этим пакетам, которые я установил ранее:

  • xunit (2.3.0-beta1-build3642)
  • xunit.runner.visualstudio (2.3.0-beta1-build1309)
Arman
источник
9
Это помогло мне, мне не хватало пакета xunit.runner.visualstudio.
Огнен Бабич
Мой .NET 4.72 MS Test проект нужен TestPlatform.TestHostтолько при переходе с VS 2017 на VS 2019.
ΩmegaMan
Это решило это для меня. В окне «Вывод» выберите «Тесты» из выпадающего списка => см. Сообщение «отсутствует TestHost».
datchung
22

Установить xunit.runner.visualstudioпакет для тестового проекта

Крис Элбрехт
источник
Лучший ответ на странице. Исправлена ​​моя проблема.
РБ Дэвидсон
14

Выполните следующие действия:

  1. Обновите свой MsTest.TestAdapterи MsTest.TestFramework dll'sот nugget package manager.
  2. Очистите ваше решение
  3. Создайте свое решение.
Венкат Раманан
источник
1
Можете ли вы открыть клон этого вопроса и самостоятельно ответить, как я сделал? Этот о xUnit v2 и позже. Даже ответы xUnit v1 здесь не место. Вы можете сослаться на него с помощью см. Также в верхней части вопроса, или я могу
сослаться
Это решение работает .. В противном случае каждый раз, когда мне приходилось удалять, %TEMP%\VisualStudioTestExplorerExtensionsи все же иногда мне приходилось запускать тесты с консоли.
Венки
Я использую NUnit и решил эту проблему, обновив NUnit3TestAdapter до последней версии через NuGet.
dpberry178
Спасибо за это - в моем случае просто пришлось обновить пакет-переустановить MSTest.TestAdapter и тесты были подобраны.
Роб
10

Я боролся с этим весь день, работая над проектом ASP Core и xUnit 2.2.0. Решением для меня было добавление ссылки наMicrosoft.DotNet.InternalAbstractions

Я узнал об этом, когда пытался запустить тестовый проект вручную, с dotnet testкоторым не удалось, но сообщил, что InternalAbstractionsотсутствует. Я не видел эту ошибку в тестовом окне вывода при сбое автоматического обнаружения. Единственной информацией, которую я увидел в окне обнаружения, был код возврата, который ничего не значил для меня в то время, но в ретроспективе, вероятно, указывал на ошибку.

Том Макин
источник
"но сообщил о полезной ошибке" ... что было? Также вы можете проверить, что он определенно не был указан в окне ошибок обнаружения, как указано в OP - т.е. можете ли вы с уверенностью заявить: «Я посмотрел в окне« Вывод »и вообще ничего не вижу в разделе« Тест »в выводе Показать из вкладок». «. ?
Рубен Бартелинк
1
Смотрите обновленный ответ, я опубликую информацию о коде возврата позже, если она уместна.
Том Макин
9

Это случалось со мной пару раз - когда я очищаю проект и собираю его снова, это обычно бывает нормально.

Liam
источник
какие-нибудь контрольные сообщения, когда вы смотрите в окне вывода с тестами, выбранными в раскрывающемся списке?
Рубен Бартелинк
2
Лиам
В моем случае Test Explorer завис на ранее не пройденном тесте. Если бы я просмотрел его и попытался щелкнуть правой кнопкой мыши -> Выполнить или что-нибудь еще, то весь VS завис бы. Простое выполнение команды «Очистить и восстановить» очистило статус теста и устранило проблему для меня.
Piedone
Могу ли я добавить, что простое построение (например, F6) не поможет, вам нужно щелкнуть правой кнопкой мыши решение в VS Solution Explorer и выбрать Rebuild Solution.
Piedone
8

Убедитесь, что ваш тестовый класс общедоступен .

shaeed
источник
это явно рассматривается в первом условии (я связываю другой вопрос, который охватывает этот случай); эта Q + A предназначена только для устранения неполадок, связанных с тем, как нормально работающие тесты, которые работают в других местах, не работают для кого-то прямо сейчас в данной среде. Для меня этот ответ просто сбивает с толку вопросы, поскольку он разбавляет этот отчет.
Рубен Бартелинк
1
Большое тебе спасибо. Ты спас мой день.
Hellouworld
7

Причиной в моем случае было то, что целевая сборка не была одинаковой между отладчиком проекта и исполнителем тестов. Чтобы объединить эти элементы:

  1. Тест> Настройки теста> Архитектура процессора по умолчанию. затем выберите X64 или X86.
  2. Проект> (ваш проект) Свойства> Сборка (вкладка)> Цель платформы.

После того, как они будут идентичны, перестройте свое решение, тогда для вас появятся методы тестирования.

Джавад Сабир
источник
6

Проведя 2 дня ... ничего из вышеперечисленного не помогло мне. Единственным «решением» было: Перейти в свойства проекта -> Build Tab. Затем нажмите кнопку «Дополнительно» в правом нижнем углу панели. Измените «Debug Info:» на «full» и нажмите «ОК».

Вот скриншоты: введите описание изображения здесь

введите описание изображения здесьвведите описание изображения здесь

curiousBoy
источник
звучит больно. Спасибо, что поделились, и надеюсь, что это поможет кому-нибудь когда-нибудь. Однако я должен сказать: я не могу придумать причину, по которой уровень отладочной информации влияет на процесс обнаружения, поэтому я могу только сказать: «Я не думаю, что это было тем, что действительно выстрелило в медведя» - будем надеяться, что я неправ хотя;)
Рубен Бартелинк
@RubenBartelink полностью согласен с вами, поэтому я упомянул «решение» в цитате :), но как ни странно, он сразу же сработал, как только я это сделал.
curiousBoy
Большое спасибо. Это также было исправлением для меня :)
Babulaas
6

Я использую xUnit 2.2.0.

Моя проблема заключалась в том, что мое решение не смогло найти определенные библиотеки и app.configпыталось их решить. Ошибка не отображалась в окне вывода теста в Visual Studio.

Я смог определить ошибку, когда я установил xunit.runner.consoleи попытался запустить тесты через командную строку.

Как запустить тесты xunit в CLI .

SohamC
источник
5

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

У меня была такая же проблема с самой последней VS 2017 (версия 15.5.7) и XUnit 2.3.1. Пакет xunit.runner.visualstudio был установлен, однако тесты не отображались во встроенном обозревателе тестов VisualStudio.

Я работал над устаревшим проектом, ориентированным на .NET Framework 4.5. Однако, начиная с версии 2.2. XUnit не поддерживает платформы .NET ниже 4.5.2 (см. Примечания к выпуску - XUnit 2.2: 19 февраля 2017 г.

Изменение целевой структуры тестового проекта на версию> = 4.5.2 работало для меня. Вам не нужно менять версию проекта, которую вы тестируете, речь идет только о самом тестовом проекте.

baumgarb
источник
5

У меня была та же проблема с Visual Studio 2019. Просто установил следующие пакеты NuGet, и проблема была решена.

1). XUnit

2). xunit.runner.visualstudio

3). Microsoft.TestPlatform.TestHost

4). Microsoft.NET.Test.Sdk

Чамиля Маддумаж
источник
3

Это также может быть связано с тем, что флажок сборки не установлен для текущего проекта платформы в конфигурации сборки. Нажмите Построить | Затем настройте диспетчер конфигурации и убедитесь, что у тестовых проектов есть отметка в столбце сборки для используемой вами платформы (например, «x86»).

Это было определенно решение, которое работало для меня.

cd747
источник
Я бы поддержал это, если бы это было на stackoverflow.com/questions/16214684/…, поскольку это не специфично для xunit2 и является хорошим элементом контрольного списка
Рубен Бартелинк
3

Убедитесь, что вы не написали свои модульные тесты в библиотеке классов .NET Standard 2.0. На момент написания этой статьи бегунок visualstudio не поддерживает выполнение тестов в библиотеках классов netstandard2.0.

Проверьте здесь для матрицы совместимости бегуна:

https://xunit.github.io/#runners

vullnetyy
источник
3

Столкнулся с аналогичной проблемой, когда VS не обнаружил методы испытаний. В моем случае у меня было ключевое слово static с методом, который я удалил, и это сработало.

[TestMethod]

Before: public static void Test1()

After: public void Test1()
живи любя
источник
1
Я бы действительно предпочел, если бы этого не было здесь, поскольку речь идет о правильных тестах, которые невозможно найти в конкретном случае VS. У меня есть один ответ на вопрос, почему тест xunit не может быть обнаружен: stackoverflow.com/questions/16214684/… . Могу ли я предложить вам создать причину, по которой мой тест MSTest не может быть выбран (VS, если хотите). (Как вы, вероятно, знаете, эта конкретная проблема даже не относится к xUnit, что является еще одной причиной, по которой,
Ruben Bartelink
MSTest не нашел мои тесты, потому что модификатор доступа к классу был внутренним.
Абдул Сабур
3
  1. Закройте все экземпляры Visual Studio
  2. Перейти к% TEMP% \ VisualStudioTestExplorerExtensions \
  3. Удалить specrun связанные папки
  4. Попробуй еще раз

дай мне знать спасибо

alvarodoune
источник
2

В моем случае в решении было 2 разных тестовых проекта. Тесты проекта 1 могут быть найдены, но тесты проекта 2 - нет. Я обнаружил, что сначала выгрузка тестового проекта 1, затем закрытие VS> очистка моих временных файлов> повторное открытие решения> перестройка позволили VS обнаружить мои тесты Project 2.

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

Зак Дж.
источник
2

Я долго страдал от этой проблемы.

  • У меня было около 100 проектов, разные версии были развернуты на разных серверах.

  • Обновление xunit с 2.2.0 до 2.3.1 не было решением, потому что сборка в 2.3.1 была неудачной.

Затем я просто обновил xunit.runner.visualstudio до 2.3.1, и все стало работать нормально. Я использовал эту команду в консоли диспетчера пакетов для обновления моего пакета xunit.runner.visualstudio

Get-Project ComapanyName.ProjectName.*.Tests | Install-Package xunit.runner.visualstudio -Version 2.3.1
Нафиз Абрар
источник
1

Самым распространенным виновником для меня было то, что Visual Studio пыталась запустить тесты, используя архитектуру, отличную от библиотеки, которую она тестирует. К сожалению, есть несколько мест, где кажется, что это может пойти не так.

В VS 2017 попробуйте создать файл настроек запуска, например, Default.runsettingsв своем тестовом проекте. Если ваша основная библиотека x64, содержимое должно быть:

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <RunConfiguration>
    <TargetPlatform>x64</TargetPlatform>
  </RunConfiguration>
</RunSettings>

Затем выберите этот файл в меню «Тест» -> «Настройки теста» -> «Выбрать файл настроек теста».

Затем в разделе «Тест» -> «Настройки теста», «Архитектура процессора по умолчанию» снова выберите правильную архитектуру.

Обязательно очистите и постройте весь раствор. Возможно, вам придется закрыть и снова открыть окно Test Explorer. Найдите дополнительные ошибки в окне «Вывод -> Тест», чтобы узнать больше о неправильных типах архитектуры.

FYI дополнительные записи настроек теста можно найти здесь .

Тобиас Дж
источник
1

Есть еще одна причина, которая может привести к тому, что Test Explorer не будет показывать никаких тестов, и он связан с новым переносимым .pdbформатом файлов, представленным в Visual Studio 2017 / для .NET Core, который может сломать некоторые инструменты VS. (Справочная информация: см. Отчет об ошибке «Mono.Cecil вызывает исключение OutOfMemoryException с новыми PDBs .csproj») .)

Ваши тесты не найдены из-за нового переносимого .pdb(отладочные символы) формата?

  • Откройте вывод окно .
  • Изменить раскрывающийся список Показать результаты с на Тесты .
  • Если вы видите вывод, подобный следующему (возможно, повторяется один раз для каждого из ваших тестов), то у вас есть проблема, описанная в этом ответе:

    Exception System.OutOfMemoryException, Exception converting <SignatureOfYourTestMethod>
    Array dimensions exceeded supported range.

Если да, сделайте это, чтобы решить проблему:

  • Откройте Свойства вашего тестового проекта (выберите тестовый проект в Solution Explorer и нажмите Alt+Enter ).
  • Переключиться на Build вкладку .
  • Нажмите кнопку « Дополнительно ...» (расположена в самом конце этой вкладки).
  • В раскрывающемся маркированы на отладочную информацию , выбрать none, pdb-onlyили full, но НЕ portable . Именно этот последний параметр приводит к тому, что тесты не могут быть найдены.
  • Нажмите OK и очистите и восстановите ваш проект. Если вы хотите быть более уверенным, перейдите в выходной каталог вашего тестового проекта и очистите все .pdbфайлы перед сборкой. Теперь ваши тесты должны вернуться.
Stakx - больше не помогает
источник
1

Случайно со мной, когда я сделал свои первые первые попытки ходьбы с IntelliTest в VS 2017.

Иногда, когда тестовый проект автоматически создается IntelliTest, ссылка на сборку Microsoft.ExtendedReflection( ... \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ Extensions \ Microsoft \ Pex \ Microsoft.ExtendedReflection. длл ) отсутствует. После добавления сгенерированные тесты появятся в проводнике тестов после перекомпиляции.

Кристиан
источник
1

Отказ от ответственности: речь идет не о xunit с Visual Studio 2015, а о Visual Studio 2017 с приложением UWP для модульного тестирования (MSTest). Я попал в эту ветку в поисках того же самого, так что, возможно, кто-то еще сделает то же самое

Решением для меня было обновить пакеты nuget для MSTest.TestAdapter и MSTest.TestFramework. Кажется, что когда вы создаете приложение модульного тестирования для UWP, вы автоматически не получаете последние версии.

Алекс Албу
источник
Я бы посоветовал задать вопрос с самостоятельным ответом, потому что это лучший способ изолировать такую ​​информацию - не стесняйтесь копировать и вставлять весь мой вопрос и s / xUnit / MSTest /, если вы считаете, что это имеет смысл;)
Рубен Бартелинк,
1

Моя проблема была решена установкой nuget xunit.runner.visualstudio

kDar
источник
1

В моем случае у меня есть несколько тестовых проектов в одном решении, и только один из проектов не отображал «Тестовый проводник»

Я перешел в «Управление пакетом Nuget для решения», щелкнув правой кнопкой мыши решение.

Я заметил, что на вкладке «Консолидация» было несколько «тестовых» пакетов с нюгетами, которые были не синхронизированы между проектами. Я нажал «Установить», и мои недостающие тесты обнаружились.

CBBSpike
источник
1

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

В итоге я полностью удалил свою локальную папку и заново клонировал репо. Это решило это для меня.

Пол Г
источник
1

Вот решение, которое сработало для нас. Не самый лучший, но может быть, кто-то может извлечь выгоду.

Задний план:

  • Наши скрипты были разработаны с VS 2013 и использовали NUnit VS Adapter 2.1 ..
  • Недавно мы перешли на VS 2017, и когда откроем то же решение - test не будет отображаться в Test Explorer.

После сборки мы увидим это сообщение:

[Informational] NUnit Adapter 3.10.0.21: Test discovery starting
[Informational] Assembly contains no NUnit 3.0 tests: C:\ihealautomatedTests\SeleniumTest\bin\x86\Debug\SeleniumTest.dll
[Informational] NUnit Adapter 3.10.0.21: Test discovery complete

Решение (временное):

  • Удалить NUnit Adapter 3.10 ...
  • Установите адаптер NUnit VS 2.1 ..

Теперь тесты показаны.

Андрей Хомский
источник
Пожалуйста, извлеките свой (хотя бы на первый взгляд) новый вопрос в свой пост, чтобы получить четкий ответ :)
geisterfurz007
... Под названием "почему NUnit TestAdapter v3 не видит мои тесты NUnit v2?" И как этот ответ удален, так как он не очень хорошо вписывается xUnit v2 testsв заголовок
Рубен Бартелинк
0

Также проверьте, есть ли в тестовом проекте полностью пустой файл app.config (полностью пустой, без разметки). Это был виновник в моем случае.

Гопал Кришнан
источник
0

В моем случае я создал новую «конфигурацию решения», как показано на рисунке. Поэтому, когда я выбираю свой пользовательский как «Prod», он по какой-то причине не распознает TestMehods. Переключение обратно на «Отладка» решает проблему

введите описание изображения здесь

batmaci
источник
0

Я не знаю, используют ли некоторые из вас JustMock, но мне пришлось отключить профилировщик в VS 2017, чтобы тестовое определение работало.

chrisdrobison
источник
Хммм. Если вы включите его снова, он сразу же снова выйдет из строя?
Рубен Бартелинк
Ага. Если я закрываю решение, включаю профилировщик и возвращаюсь, обнаружение теста не проходит.
chrisdrobison