Почему 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 проходит несколько тестов.)

Что дает?


person Ruben Bartelink    schedule 25.04.2013    source источник
comment
связанные: stackoverflow.com/questions/16647789/   -  person Ruben Bartelink    schedule 22.05.2013
comment
связанные (VS2015): stackoverflow.com/questions/35103781/   -  person Ruben Bartelink    schedule 30.09.2016


Ответы (8)


TL; DR ваши тестовые классы должны быть public (но ваши методы тестирования могут быть private и / или static)


Из соображений эффективности авторы xUnit решили не использовать BindingFlags.NonPublic при поиске тестовых классов в средстве выполнения (таблицы метаданных MSIL не индексируют классы _5 _ (/ _ 6_) в одинаковой степени, следовательно, существует значительная разница в производительности в относительная эффективность, которой может достичь Reflection).

В результате вышеизложенного тот факт, что ваш class равен private, означает, что его не заберут.

Тот факт, что используется метод тестирования private и static, в порядке - xUnit изначально поддерживает оба этих аспекта, начиная с версии 1.0.

Обратите внимание, что расширение Visual Studio xUnit Runner, xunit.console.exe (и графический интерфейс), задача xunit MSBuild, Resharper и CodeRush согласованно соблюдают это (хотя, возможно, они [особенно последние два] могут сделать больше, чтобы отметить, когда Test Class ( т.е. класс [потенциально косвенно] содержащий аннотации, производные от Fact) равен private).

Причина, по которой TestDriven.net запускает ваш тест, заключается в том, что автор TestDriven.net приложил большие усилия, чтобы сделать его Just Work. Он внутренне использует специальную оболочку / прокладку Test Runner (называемую Adhoc Runner) для запуска вашего теста. Имейте в виду, что метод на самом деле не запускается через бегун xUnit.net, и, следовательно, любые атрибуты, которые вы добавляете в свой тест, которые имеют побочные эффекты, не будут активированы.

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

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

person Ruben Bartelink    schedule 25.04.2013
comment
У меня такая же проблема, мой класс общедоступен, я пытаюсь использовать средство запуска теста MS с расширением Visual Studio xUnit Test Runner с VS 2012 - person Kyle Gobel; 02.09.2013
comment
@Kyle Мне непонятно, что вы делаете и / или видите в результате, и / или как кто-то может вам помочь. У меня была проблема, и вы прокомментировали мое решение. Во-первых, обратите внимание, что этот вопрос и ответ относятся к xUnit.net. Вы упомянули MS Test, который полагается на встроенный бегун (и я почти уверен, что MSTest не позволяет использовать методы тестирования как частные). - person Ruben Bartelink; 02.09.2013
comment
извините за случайный вопрос с комментарием, моя проблема заключалась в том, что я установил предварительный пакет nuget, который не включает xunit.dll, но xunit2.dll, поэтому он не подберет ни один из тестов - person Kyle Gobel; 03.09.2013
comment
@Kyle а, теперь это имеет смысл - по крайней мере, достаточно смысла, чтобы добавить в качестве ответа, чтобы я мог проголосовать за него (я лично знал об этом, но я могу гарантировать, что кто-то будет укушен и поблагодарит вас за это) - person Ruben Bartelink; 03.09.2013
comment
Мой класс фактов тоже public, я пробовал как бета, так и небета-пакеты Nuget (для Xunit.net и бегунов), Test Explorer не находит мои Fact методы. - person BrainSlugs83; 14.12.2014
comment
@ BrainSlugs83 Вы уверены, что у вас установлен плагин xUnit.net для VS? Что представляет собой область «Тесты» в выводе, относящаяся к процессу обнаружения? - person Ruben Bartelink; 15.12.2014
comment
Я собирался проголосовать за этот ответ, когда увидел, что у меня уже был ... вероятно, несколько месяцев назад, когда я проделал то же самое. Фу. Спасибо! - person Todd Vance; 02.12.2016
comment
Попробовав различные другие методы, перечисленные здесь и в других местах, этот ответ отлично сработал для меня. Этот ответ должен быть в верхней позиции. - person dotcoder; 14.06.2017
comment
@mohang спасибо - я считаю, что он находится в верхней позиции (поскольку я сам принял это!). [Я удалю этот свой комментарий, когда увижу его в следующий раз, поскольку он не представляет никакой ценности] - person Ruben Bartelink; 14.06.2017
comment
Не уверен, почему это не поднято выше, чем другие ответы. Мне пришлось немного прокрутить ... Все еще пытаюсь понять, почему Visual Studio по умолчанию не публикует. - person andrewCanProgram; 20.08.2017
comment
@andrewCanProgram en.wikipedia.org/wiki/Principle_of_least_privilege - по той же причине readonly должен был использоваться по умолчанию для полей;) Я принял ответ, поэтому он должен быть первым; может ты отсортировал по активности? - person Ruben Bartelink; 21.08.2017

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

  1. Установите средство запуска xUnit.net для Visual Studio 2013 (будьте осторожны при запуске Visual Studio от имени администратора, иначе тесты могут не запускаться при запуске IDE от имени администратора):

    а. В Visual Studio 2013 перейдите в Инструменты - ›Расширения и обновления -› Онлайн.

    б. Найдите бегун xUnit.net для Visual Studio 2012 и 2013.

    c. Затем скачайте (установите) его. При обновлении до VS 2013 с VS 2012 рекомендуется удалить его, а затем установить заново.

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

  2. Если установлен ReSharper, установите плагин для запуска тестов xUnit.net:

    (ПРИМЕЧАНИЕ. Начиная с ReSharper 2016.1, Поддержка xunit встроена в ReSharper, что означает, что плагин xunit больше не требуется.)

    а. В Visual Studio 2013 выберите: Resharper - ›Менеджер расширений.

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

    c. Найдите «xunit.net». Выберите «Поддержка тестирования xUnit.net». Щелкните Установить.

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

  3. «Очистите» раствор

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

    б. Перекомпилировать.

    c. Теперь, щелкнув правой кнопкой мыши атрибут [Fact], выберите Resharper «Запустить модульные тесты» (в отличие от «Запускать тесты» по умолчанию).

Устранение неполадок при работе с 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). Однажды я заметил, что при деинсталляции некоторые сообщения об ошибках мигали. В какой-то момент я сделал снимок экрана, и он перечислил:

    • Access to the path C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\ReSharper\v8.1\plugins\xunit.dll is denied.
    • ... и то же самое для других DLL в этом каталоге

Чтобы решить эту проблему, удалите каталог C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\ после удаления из Visual Studio, затем запустите Visual Studio от имени администратора и переустановите через ReSharper (Resharper - ›Extension Manager)

person CJBS    schedule 09.01.2014
comment
Однозначный ответ для VS 2013 + ReSharper 8.2 - person Ognyan Dimitrov; 24.04.2014
comment
Для VS 2013 + R # 8.2 я обнаружил, что перезапуск VS работал у меня. Это происходит после использования диспетчера расширений R # для загрузки и установки поддержки xUnit. - person JasonCoder; 20.05.2014
comment
Хотел бы я проголосовать больше одного раза! Мне не хватало расширения resharper: S - person sǝɯɐſ; 05.12.2014
comment
NB. На самом деле это не касается моего вопроса напрямую - вопрос в том, почему ни один бегун ни при каких обстоятельствах не может найти тест (кроме TestDriven.net, в отличие от того, что может быть не так на машине, которая может заставить бегуна не находить тесты, которые я может работать в других местах. Я ценю, что это очень полный ответ, который поможет людям, которые приземляются здесь, поэтому я рад, что он останется, несмотря на этот факт. - person Ruben Bartelink; 10.03.2015
comment
@RubenBartelink Когда я писал это, у меня были проблемы с тем, чтобы ReSharper запускал мои тесты xUnit, и мой результат Не найдено тестов для запуска. было таким же, как описано в вашем вопросе. У меня не было TestDriven.net, поэтому я не мог проверить это в любом случае. Многие из моих проблем с xUnit были связаны с обновлениями, установленными через NuGet или ReSharper, отсюда и инструкции по их устранению. - person CJBS; 10.03.2015
comment
Как я уже говорил, это определенно полезно для людей, но TeamCity, xunit.gui.exe и xunit.console.exe также не могут найти TestMethod, что было ключевым аспектом моего вопроса. Как я уже сказал, получилось хорошо - люди, очевидно, получают помощь от вашего ответа - person Ruben Bartelink; 11.03.2015
comment
@RubenBartelink Очко занято. - person CJBS; 11.03.2015
comment
@CJBS Я думаю, самый простой способ выразить это - изменить заголовок на Почему бегун xUnit не находит (часть) моего теста. Однако, поразмыслив, можно сказать, что вопрос «одного окна» - это именно то, что нужно людям, даже если он идет вразрез с некоторыми принципами SO. - person Ruben Bartelink; 11.03.2015
comment
У меня уже был установлен Resharper, и я использовал XUnit..Followed point.2, упомянутый @CJBS, он работал как шарм. Спасибо - person WonderHeart; 30.07.2015

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

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

person Dan Friedman    schedule 19.10.2016
comment
Привет, Дэн, у меня есть ссылка в теме: по вопросу: stackoverflow.com/questions/35103781/, которые относятся к этому семейству Проблемы Я действительно хотел бы, чтобы этот вопрос был сосредоточен на причинах, по которым xUnit не видит тест. Я очень надеюсь, что вы согласитесь с тем, что переходить туда и делать ссылки - это к лучшему. Могу ли я как-то прояснить это в вопросе или в своем ответе? (например, здесь удалено еще 3 ответа, которые были похожими попытками быть полезными, но могли бы запутать ситуацию) - person Ruben Bartelink; 19.10.2016
comment
Я получаю ту же ошибку. Не найдено ни одного теста для запуска. Возможно, для вас это была другая проблема, но обе ситуации приводят к одной и той же ошибке. Альтернативный ответ не означает, что есть второй вопрос. Во всяком случае, этот ответ можно объединить с принятым ответом, чтобы показать все причины, по которым тесты могут не отображаться. - person Dan Friedman; 19.10.2016
comment
мы должны согласиться отличаться. Контекст другой - я явно говорю VS2012, тогда как у вас должна быть конкретная (редкая) проблема в VS2015 с xUnit v2, а не V1. Есть 2 удаленных ответа, которые более актуальны, чем ваш. Должен ли я попросить их отменить удаление (примеры: resharper, .NET core beta, установка xUnit.Runner.Console вместо рабочего стола). Вы не довольны, что есть версия Resharper и версия VS2015, и пусть это будет полезно через 5 лет, а ваш ответ будет конкурировать с ответом VS2019, когда ваш будет совершенно неактуальным? - person Ruben Bartelink; 20.10.2016

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

Install-Package xunit.runner.visualstudio
person Dhanuka777    schedule 06.03.2017
comment
Не могли бы вы уточнить, был ли у вас изначально установлен пакет? то есть, я считаю, что для приведенной выше команды потребуется флаг -Reinstall, чтобы сделать то, чего у вас не было? - person Ruben Bartelink; 06.03.2017
comment
Да, у меня был установлен пакет, это обновило бегун xunit до 2.2.0 с версии 2.2.0-beta5-build1225. - person Dhanuka777; 07.03.2017
comment
xunit.runner.console недостаточно, но когда я установил это, он работал - person Alexander; 19.06.2018

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

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

person RichardU    schedule 26.11.2013
comment
Это довольно глупый выбор разработчиков xUnit, если они собирались сделать 2.0 настолько сломанным в настоящее время, им следовало бы переименовать весь проект в xUnit2, а не делать этого. - person Chris Marisic; 12.02.2014

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

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

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

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

person Adrian Reid    schedule 10.03.2015
comment
Ссылка не работает: 404 - Здесь нет сайта GitHub Pages. - person Matt; 25.02.2021

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

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

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

person StoriKnow    schedule 09.08.2016
comment
+1 Есть сообщения в окне вывода при тестовом обнаружении, когда оно ломается? если да, то стоит добавить в пост, если есть - person Ruben Bartelink; 10.08.2016
comment
К сожалению нет. Он просто сказал, что тестов не найдено. У меня не было проблем, пока я не добавил класс с сомнительно длинным именем и методом тестирования и не сложил два и два. - person StoriKnow; 10.08.2016

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

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

    dotnet build
    

ПРИМЕЧАНИЕ. Сборка из Visual Studio.NET не работает! ‹*********** ВАЖНО!

  1. Запустите тесты: Test -> Run -> Test All - CTRL + R + A (это обнаружит новые тесты, но не запустит новые тесты).
  2. Снова запустите тесты.
person mkaj    schedule 07.12.2016
comment
Привет! Обратите внимание на вопрос, почему проблема возникает только с одним TestClass. Пожалуйста, сделайте это как вопрос для самостоятельного ответа и обратите внимание, что это именно то, что может возникнуть в .NET Core (для предварительной версии) - в нем есть два голоса за вас, тогда как я действительно не думаю, что это полезно для этого конкретный вопрос - person Ruben Bartelink; 07.12.2016
comment
Я обновил свой ответ, поскольку он касается одного класса или только одного метода, который он не найдет. Интересно, что вы заметили, что это только предварительная версия .NET Core. Мы еще не обновились. Далее по картам. - person mkaj; 07.12.2016
comment
Лишь слегка покачнулся. Полагаю, голоса здесь покажут, считает ли кто-нибудь это подходящим местом (помните, заголовок показывает, почему бегун xUnit не находит мои тесты - есть много вопросов, связанных с VS2015 (или вы используете VS2017?)) - person Ruben Bartelink; 08.12.2016
comment
Меня не беспокоит количество голосов. Я разместил здесь, чтобы предоставить дополнительные возможности для других игроков - если у них возникнет такая же проблема. Вот как я обнаружил исправление. Я использую предварительную версию .NET Core с VS2015. - person mkaj; 08.12.2016
comment
Моя точка зрения относительно голосов за то, что они измеряют релевантность ответа на а) вопрос б) критерии поиска, которые могут привести к вопросу. Я говорю, что б) может иметь место, несмотря на то, что а) это не так. Я с уверенностью согласен, что вы не дали столь подробный ответ, основанный на безумном желании получить фальшивые точки доступа в Интернет, и действуете добросовестно; Однако я с уважением продолжаю утверждать, что этот ответ находится не в наиболее подходящем для него месте (NB есть еще 3 ответа, которые были удалены авторами здесь: 1xResharper, 1xDnx, 1x не устанавливается xunit.runner.visualstudio) - person Ruben Bartelink; 08.12.2016
comment
Возникла аналогичная проблема с VS2019, отображающим значки прохождения / сбоя теста над тестируемым методом. Выбор Test - ›Run -› Test All - CTRL + R + A, как указано в этом ответе, решил проблему для меня. - person nbstrat; 19.07.2021