Почему 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 видит некоторые тесты.)
Что дает?
10 ответов
TL;DR ваши тестовые классы должны быть public
(но ваши методы испытаний могут быть private
и / или static
)
Из соображений эффективности авторы xUnit решили не использовать BindingFlags.NonPublic
при поиске тестовых классов в средстве выполнения (таблицы метаданных MSIL не индексируются private
(/ internal
) в одинаковой степени, следовательно, существует значительная разница в производительности в относительной эффективности, которой может достичь Reflection).
В результате вышесказанного, тот факт, что ваш class
является private
означает, что это не подобрано.
Тот факт, что метод испытаний private
а также static
хорошо - xUnit по дизайну, так как 1.0 поддерживает оба этих аспекта.
Обратите внимание, что расширение Visual Studio xUnit Runner, xunit.console.exe
(и графический интерфейс), xunit
Задача MSBuild, Resharper и CodeRush - все последовательны в соблюдении этого (хотя, возможно, они [особенно последние два] могут сделать больше, чтобы пометить, когда тестовый класс (то есть класс [потенциально косвенно]), содержащий Fact
аннотации) private
).
Причина, по которой TestDriven.net запускает ваш тест, заключается в том, что автор TestDriven.net приложил немало усилий, чтобы он просто работал. Для запуска теста он использует специальную оболочку / прокладку Test Runner (называемую Adhoc Runner). Имейте в виду, что метод на самом деле не запускается через бегунок xUnit.net, и поэтому любые атрибуты, которые вы добавили в свой тест и которые имеют побочные эффекты, не будут запущены.
В частности, NUnit (и я уверен, что MSTest) использует частное отражение [и, следовательно, выбирает тесты в private
классы], поэтому, вероятно, вам никогда не казалось важным беспокоиться раньше.
Примечание: побочный эффект / уловка, включенная этим, состоит в том, что вы можете сделать тестовый класс private
как быстрый способ Skip
пингуйте все тесты в тестовом классе [и любые вложенные классы]. (К сожалению, случаи на этой планете такого использования непреднамеренно значительно превосходят намеренные случаи этого!)
Этот ответ предназначен для VS 2013, но шаги в основном те же, что и для VS 2012. Это применимо для запуска через функциональность модульного тестирования ReSharper.
Установите модуль запуска xUnit.net для Visual Studio 2013 (будьте осторожны при запуске Visual Studio от имени администратора, иначе тесты могут не запускаться при запуске среды IDE без прав администратора):
а. В Visual Studio 2013 перейдите в Инструменты -> Расширения и обновления -> Онлайн
б. Поиск бегуна xUnit.net для Visual Studio 2012 и 2013
с. Тогда загрузите (установите) это. При обновлении до VS 2013 с VS 2012 предлагается удалить его, а затем переустановить.
д. Перезапустите Visual Studio.
Если установлен ReSharper, установите подключаемый модуль для запуска теста xUnit.net:
а. В Visual Studio 2013 перейдите: Resharper -> Диспетчер расширений.
б. Слева выберите Online.
с. Ищите "xunit.net". Выберите "Поддержка тестирования xUnit.net". Нажмите Установить.
д. Перезапустите Visual Studio 2013.
"Чистый" раствор
а. В среде IDE в обозревателе решений щелкните правой кнопкой мыши решение и выберите "Очистить".
б. Re-компиляции.
с. Теперь, когда правой кнопкой мыши
[Fact]
выберите "Выполнить юнит-тесты" Решарпера (в отличие от "Выполнить тесты" по умолчанию)
Устранение неполадок при работе с XUnit:
Если проблемы с запуском [Fact] тестов с XUnit сохраняются, может потребоваться вручную удалить пакет xUnit из любой / всех следующих папок (просмотрите содержимое библиотек DLL xunit, затем удалите папку xUnit, если она найдена):
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\
C:\Users\<username>\AppData\Local\Microsoft\VisualStudio\12.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:
Если у вас возникают проблемы с обнаружением или выполнением тестов, вы можете стать жертвой поврежденного кэша бегуна в Visual Studio. Чтобы очистить этот кэш, закройте все экземпляры Visual Studio, а затем удалите папку%TEMP%\VisualStudioTestExplorerExtensions. Также убедитесь, что ваш проект связан только с одной версией пакета NuGet для бегуна Visual Studio (xunit.runner.visualstudio).
У меня была такая же проблема в проекте VS2017 RC, .NET core 1.1. Обновление xunit.runner работало на меня,
Install-Package xunit.runner.visualstudio
(На что ссылается @Kyle в комментариях к другому ответу) То же самое No tests found to run
сообщение может появиться в результате использования NuGet для получения xUnit.dll и в конечном итоге с версией 2.0.0 (которая в настоящее время помечена как предварительная версия, так как некоторые основные функции, такие как обнаружение тестов v1 и т. д., еще не реализованы в этой ветви).
Решение в этом случае заключается в выборе стабильных версий (в отличие от включения предварительной версии) в диспетчере пакетов NuGet.
Я уже некоторое время сталкиваюсь с этой проблемой в.NET Core, когда тестовый класс или метод тестирования не обнаруживаются. Следующее исправление работает для меня:
- Откройте окно командной строки.
- Перейдите в каталог проекта.
Создайте проект, выполнив следующую команду:
dotnet build
ПРИМЕЧАНИЕ. Сборка из Visual Studio.NET не будет работать! <<<<<<<<<<< ВАЖНО!
- Запустите тесты: Test ->Run -> Test All - CTRL+R +A (это откроет новые тесты), но не запустите новые тесты.
- Запустите тесты снова.
Для меня сочетание моего тестового класса и имен тестовых методов было слишком длинным; xUnit, кажется, имеет некоторые ограничения на эту комбинацию.
Сокращение имени только метода теста позволило xUnit обнаружить этот единственный тест. Сокращение имени всего класса позволило xUnit обнаружить все тесты в классе.
Порог имени класса + имя метода составляет 172 символа.
В моем случае, чтобы увидеть какие-либо тесты, мне пришлось выполнить следующие шаги:
(Все установлено через диспетчер пакетов NuGet)
- устанавливать
xUnit
v2.0.50727 - устанавливать
xUnit.extensions
v2.0.50727 - Перейдите по следующей ссылке и выполните действия, описанные в документации: http://xunit.github.io/docs/running-tests-in-vs.html
Я использую Visual Studio 2013 Premium. (Решарпер НЕ установлен)
Я понял, что это произошло потому, что имя файла моего тестового класса былоMyTests
вместоMyTests.cs
Среда IDE распознала его как тестовый класс C#, но средство выполнения не скомпилировало его.
dotnet test --verbosity detailed
помогло.
Моя проблема заключалась в том, что я обновился до версии2.4.5
. Однако проект, над которым я работаю, предназначен для .NET Standard 2.0. Поэтому пришлось откатиться до версии2.4.3
изxunit.runner.visualstudio
, так как он поддерживает " .NET 2.0 или более позднюю версию ". Но начиная с версии2.4.4
, « .NET Core 3.1 или более поздняя версия » поддерживается.