Почему 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 как быстрый способ Skipping все тесты в тестовом классе [и любых вложенных классах]. (К сожалению, случаи на этой планете этого использования непреднамеренно значительно превосходят преднамеренные случаи этого!)


этот ответ для VS 2013, но шаги по существу одинаковы для VS 2012. Это относится к запуску через функциональность модульного теста ReSharper.

  1. установите 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.

  2. если ReSharper установлен, установите xUnit.net плагин Test runner:

    a. В Visual Studio 2013 Перейдите: Resharper - > Диспетчер Расширений.

    b. Слева выберите Online.

    c. Искать "xunit.net". Выберите "xUnit.net поддержка испытания". Нажмите Кнопку Установить.

    d. Перезапустите Visual Studio 2013.

  3. "очистить" решение

    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)

  1. установить xUnit П2.0.50727
  2. установить xUnit.extensions П2.0.50727
  3. перейдите по следующей ссылке и выполните действия, описанные в документации: http://xunit.github.io/docs/running-tests-in-vs.html

Я использую Visual Studio 2013 Premium. (Для ReSharper не установлено)


У меня была эта проблема с .NET Core в течение некоторого времени, когда тестовый класс или тестовый метод не обнаруживаются. Для меня работает следующее исправление:

  1. откройте окно командной строки.
  2. перейдите в каталог проекта.
  3. построить проект, выполнив следующую команду:

    dotnet build
    

Примечание: построение из визуального Studio.NET не получится! важно!

  1. выполнить тесты: Test --> Run --> Test All-CTRL+R +A(это откроет новый тест(ы) - но не запустить новый тест (ы).
  2. запустите тесты еще раз.