Почему xUnit Runner не находит мои тесты
у меня есть xUnit.net проверить следующим образом:
static class MyTestClass
{
[Fact]
static void MyTestMethod()
{
}
}
плагин xUnit для VS 2012 говорит:
тесты не найдены для запуска.
TestDriven.net работает отлично но упоминает что-то о ad hoc:
1 пройдено, 0 не удалось, 0 пропущено (см. "список задач"), заняло 0,47 секунды (ad hoc)
TeamCity, xunit.gui.exe
и xunit.console.exe
и Visual Studio также не может найти TestMethod
(Я xunit.runner.visualstudio
установлен и VS видит некоторые тесты.)
что это дает?
8 ответов
TL; DR ваши тестовые классы должны be public
(но ваши методы тестирования могут быть private
и/или static
)
по соображениям эффективности авторы xUnit решили не использовать BindingFlags.NonPublic
при поиске тестовых классов в runner (таблицы метаданных MSIL не индексируют private
(/internal
) классы в той же степени, следовательно, существует значительная разница в производительности относительной эффективности, которую может достичь отражение).
в результате вышеизложенного, тот факт, что ваш class
is private
означает, что его не забирают.
тот факт, что метод испытаний private
и static
отлично-xUnit по дизайну, так как 1.0 поддерживает оба этих аспекта.
обратите внимание, что расширение Visual Studio xUnit Runner,xunit.console.exe
(и графический интерфейс),xunit
задача MSBuild, Resharper и CodeRush все последовательны в чтении это (хотя, возможно, они [особенно последние два] могут сделать больше, чтобы отметить, когда тестовый класс (т. е. класс [потенциально косвенно] содержащий Fact
-производное annoations) составляет private
).
причина TestDriven.net запускает ваш тест, что автор TestDriven.net приложил большие усилия,чтобы это сработало. Он внутренне использует специальную оболочку/прокладку бегуна теста (названную бегуном Adhoc) для запуска вашего теста. Имейте в виду, что метод на самом деле не выполняется через xUnit.net runner и, следовательно, любые атрибуты, которые вы ставите на свой тест, которые имеют побочные эффекты, не будут срабатывать.
особенно NUnit (и я уверен, что MSTest) do используйте частное отражение [и, следовательно, возьмите тесты в private
classes] вероятно, поэтому вам никогда не казалось важным беспокоиться об этом раньше.
Примечание: побочный эффект / трюк включен этим является то, что вы можете сделать тестовый класс private
как быстрый способ Skip
ping все тесты в тестовом классе [и любых вложенных классах]. (К сожалению, случаи на этой планете этого использования непреднамеренно значительно превосходят преднамеренные случаи этого!)
этот ответ для VS 2013, но шаги по существу одинаковы для VS 2012. Это относится к запуску через функциональность модульного теста ReSharper.
-
установите xUnit.net runner для Visual Studio 2013 (будьте осторожны при запуске Visual Studio от имени администратора, иначе тесты могут не выполняться при запуске среды IDE от имени администратора):
a. В Visual Studio 2013 перейдите в раздел Сервис - > расширения и обновления - > Online
b. Поиск xUnit.net runner для Visual Studio 2012 и 2013
c. Затем загрузите (установите) его. При обновлении до VS 2013 с VS 2012 рекомендуется удалить его, а затем повторно установить.
d. Перезапустите Visual Studio.
-
если ReSharper установлен, установите xUnit.net плагин Test runner:
a. В Visual Studio 2013 Перейдите: Resharper - > Диспетчер Расширений.
b. Слева выберите Online.
c. Искать "xunit.net". Выберите "xUnit.net поддержка испытания". Нажмите Кнопку Установить.
d. Перезапустите Visual Studio 2013.
-
"очистить" решение
a. В среде IDE в обозревателе решений щелкните правой кнопкой мыши решение и выберите "Очистить".
b. Перекомпилировать.
c. Теперь, при щелчке правой кнопкой мыши
[Fact]
атрибут, выберите Resharper "выполнить модульные тесты" (в отличие от по умолчанию "Запустить Тесты")
Устранение неполадок при работе с XUnit:
-
если проблемы с запуском тестов [факт] с XUnit сохраняются, это может необходимо вручную удалить пакет xUnit из любого / всего следующие папки (просмотрите содержимое для DLL xunit, затем удалите папка xUnit, если найдено):
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\
C:\Users\<username>\AppData\Local\Microsoft\VisualStudio.0\Extensions\
-
Что касается ReSharper, попробуйте отменить установку и переустановить библиотека xunitcontrib (xUnit.net поддержка теста). Я заметил однажды при снятии установки некоторые сообщения об ошибках мигают мимо. Я схватил снимок экрана в одной точке, и в нем указаны:
- доступ к пути
C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\ReSharper\v8.1\plugins\xunit.dll
лишенный. - ... и то же самое для другие библиотеки DLL в этом каталоге
чтобы решить эту проблему, удалить
C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\
каталог после удаления из Visual Studio, затем запустите Visual Studio как не администратор и переустановите через ReSharper (Resharper -> Extension Manager) - доступ к пути
от http://xunit.github.io/docs/getting-started-desktop.html#run-tests-visualstudio:
Если у вас возникли проблемы с открытием или тесты, вы можете быть жертва поврежденного кэша runner внутри Visual Studio. Чтобы очистить это кэш, закройте все экземпляры Visual Studio, затем удалите папка %TEMP%\VisualStudioTestExplorerExtensions. Также убедитесь, что ваш проект связан только с одной версией Visual Studio пакет runner NuGet (xunit.бегун.visualstudio).
У меня была та же проблема в VS2017 RC, .NET core 1.1 project. Обновление в xUnit.раннер работал на меня,
Install-Package xunit.runner.visualstudio
(как указано @Kyle в комментариях к другому ответу) то же самое No tests found to run
сообщение может возникнуть в результате использования NuGet для получения xUnit.dll и в конечном итоге с версией 2.0.0 (которая в настоящее время отмечена как предварительная версия как некоторые основные функции, такие как обнаружение тестов v1 и т. д. еще предстоит внедрить в этой области).
разрешение в этом случае выберите Стабильный Только версии (в отличие от Включить Пререлиз) в пакете NuGet менеджер.
для меня комбинация моего тестового класса и имен методов тестирования была слишком длинной; xUnit, похоже, имеет некоторый колпачок на этой комбинации.
сокращение имени просто метод тестирования позволил xUnit обнаружить этот единственный тест. Сокращение названия всего класс позволил xUnit обнаружить все тесты в классе.
порог имя класса + имя метода представляется 172 символов.
в моем случае, чтобы увидеть какие-либо тесты, я должен был выполнить следующие шаги:
(все установлено через Диспетчер пакетов NuGet)
- установить
xUnit
П2.0.50727 - установить
xUnit.extensions
П2.0.50727 - перейдите по следующей ссылке и выполните действия, описанные в документации: http://xunit.github.io/docs/running-tests-in-vs.html
Я использую Visual Studio 2013 Premium. (Для ReSharper не установлено)
У меня была эта проблема с .NET Core в течение некоторого времени, когда тестовый класс или тестовый метод не обнаруживаются. Для меня работает следующее исправление:
- откройте окно командной строки.
- перейдите в каталог проекта.
-
построить проект, выполнив следующую команду:
dotnet build
Примечание: построение из визуального Studio.NET не получится! важно!
- выполнить тесты: Test --> Run --> Test All-CTRL+R +A(это откроет новый тест(ы) - но не запустить новый тест (ы).
- запустите тесты еще раз.