Подтвердить что ты не робот

Почему бегун xUnit не находит мои тесты

У меня есть xUnit.net Test следующим образом:

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 видит некоторые тесты.)

Что дает?

4b9b3361

Ответ 1

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 приложил немало усилий для создания Just Work. Он внутренне использует специальную оболочку/прокладку Test Runner (называемую Adhoc Runner) для запуска вашего теста. Имейте в виду, что этот метод фактически не запускается с помощью бегуна xUnit.net, и поэтому любые атрибуты, которые вы положили на ваш тест, у которых есть побочные эффекты, не будут запускаться.

Примечательно, что NUnit (и я уверен, что MSTest) использует частное отражение [и, следовательно, выбирает тесты в классах private], что, вероятно, почему-то никогда не казалось важным для вас беспокоиться раньше.

Примечание. Включенный побочный эффект/трюк состоит в том, что вы можете сделать тестовый класс private быстрым способом Skip выполнить все тесты в тестовом классе [и любых вложенных классах]. (К сожалению, случаи на этой планете этого существа используются непреднамеренно значительно превосходят преднамеренные случаи этого, хотя!)

Ответ 2

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

  • Установите бегун 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 → Extension Manager.

    б. В левой части выберите "Интернет".

    с. Найдите "xunit.net". Выберите "Поддержка тестирования xUnit.net". Нажмите "Установить".

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

  • "Очистить" решение

    а. В среде IDE в обозревателе решений щелкните правой кнопкой мыши решение и выберите "Очистить".

    б. Re-компиляции.

    с. Теперь, щелкнув правой кнопкой мыши атрибут [Fact], выберите Resharpers "Run Unit Tests" (в отличие от стандартных "Run Tests" )

Устранение неполадок с помощью XUnit:

  • Если проблемы, выполняющие тесты [Fact] с XUnit, сохраняются, это может необходимо вручную удалить пакет xUnit из любого/всего следующие папки (просмотреть содержимое для xunit DLL, затем удалить 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)

Ответ 3

Из http://xunit.github.io/docs/getting-started-desktop.html#run-tests-visualstudio:

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

Ответ 4

У меня была такая же проблема в VS2017 RC,.NET core 1.1 project. Обновление xunit.runner работало для меня,

Install-Package xunit.runner.visualstudio

Ответ 5

(Как упоминается @Kyle в комментариях к другому ответу) То же самое сообщение No tests found to run может возникнуть в результате использования NuGet для получения xUnit.dll и заканчивая версией 2.0.0 (которая в настоящее время помечена как предварительная ссылка как некоторые ключевые функции, такие как обнаружение тестов v1 и т.д., еще не реализованы в этой ветке).

Разрешение в этом случае - это выбрать Только стабильные версии (в отличие от Включить предварительную загрузку) в диспетчере пакетов NuGet.

Ответ 6

Для меня комбинация моего тестового класса и имени метода тестирования была слишком длинной; Похоже, что xUnit имеет некоторую кепку для этой комбинации.

Сокращение имени только метода тестирования позволило xUnit обнаружить этот единственный тест. Сокращение имени всего класса позволило xUnit обнаружить все тесты в классе.

Порог имени класса + имя метода составляет 172 символа.

Ответ 7

В моем случае, чтобы увидеть какие-либо тесты, мне пришлось выполнить следующие шаги:

(Все установлено через диспетчер пакетов NuGet)

  • Установить xUnit v2.0.50727
  • Установить xUnit.extensions v2.0.50727
  • Перейдите к следующей ссылке и выполните шаги, описанные в документации: http://xunit.github.io/docs/running-tests-in-vs.html

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

Ответ 8

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

  • Откройте окно командной строки.
  • Перейдите в каталог проекта.
  • Создайте проект, выполнив следующую команду:

    dotnet build
    

ПРИМЕЧАНИЕ. Создание из Visual Studio.NET не будет работать! & Л; < < < < < < < < < < ВАЖНО!

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