Тесты не выполняются в обозревателе тестов


148

В настоящее время я работаю над решением, в котором есть 32 модульных теста. Я работал с программой для выполнения тестов resharper - она ​​отлично работает. Все тесты запущены, все тесты показывают правильный результат. Теперь коллега сказал мне, что тесты не выполняются на его машине с помощью обозревателя тестов Visual Studio. Они не работают на моей машине, поэтому я могу исключить некоторые локальные отсутствующие файлы или что-то в этом роде.

Обозреватель тестов показывает все модульные тесты, но при нажатии на «Run All» все тесты становятся серыми и не показывают результатов выполнения теста:

введите описание изображения здесь

  • Все тестовые классы открыты
  • Для всех тестовых классов [TestClass]объявлен атрибут
  • Все методы тестирования используют [TestMethod]атрибут
  • И код производительности, и тестовые проекты ориентированы на .NET 3.5.
  • Я уже пытался чистой сборка моего решения, и / или удалить все obj, bin, Debugи Releaseпапки

Я бы воспринял любые подсказки, которые могут вызвать такое поведение.


3
Обновите свой ReSharper. Обратитесь к этому stackoverflow.com/questions/16011775/…
kmhigashioka

20
Разве не было бы замечательно, если бы VS сказал, почему тест не был запущен? Несоответствующая целевая платформа, отсутствующий тестовый адаптер, ... :(
Бернхард Хофманн

2
Где упоминается, что они используют ReSharper?
Alex 75,

6
@BernhardHofmann Прямо сейчас я столкнулся с такой же проблемой, и оказалось, что VS выплевывал некоторые сообщения об ошибках в Output> Tests. Важный. Разочаровывает, что VS не делает их более заметными, но в такой ситуации стоит посмотреть.
JLRishe,

2
Возможно, вам всем будет интересно проголосовать за этот запрос функции: developercommunity.visualstudio.com/idea/947742/…
Кайл Делани,

Ответы:


163

Если ваши проекты не все AnyCpu, вы также можете проверить, совпадают ли следующие 2 настройки:

  1. [Щелкните правой кнопкой мыши тестовый проект] -> Свойства -> Сборка -> Цель платформы - например, x64

  2. [Главное меню] -> Тест -> Настройки теста -> Архитектура процессора по умолчанию -> X64

Я обнаружил, что, когда они не совпадают, мой тестовый проект не запускается.


6
этот ответ - "включите и выключите снова", так что, если это сработает для вас, пожалуйста, проголосуйте за.
lukkea

в этом исправлены мои проблемы (переключение со смешанных платформ на anycpu)
Марсель Студер

1
убедитесь, что ваши тестовые проекты не netstandard2.0, а netcoreapp2.2
user2033412

4
Работал. Я действительно с VS, вы знаете, дал бы нам четкое предупреждение или сообщение об ошибке или что-то в этом роде.
Anon

9
Версия VS2019: Главное меню -> Тест -> Архитектура процессора для проектов AnyCPU -> X64.
StackOverthrow

64

У меня была такая же проблема в VS 2017. В моем случае она решалась перезапуском VS.


8
мой предыдущий комментарий о том, почему я дал это отрицательное голосование, был удален, поэтому я буду немного понятнее. Это не решение проблемы; это очень временное исправление, которое не решает основную проблему. Я не думаю, что ТАК должно быть местом, куда люди должны приходить, чтобы им говорили «выключите и снова включите», это знание, которое нужно выучить еще до того, как вы сюда приедете. См. Ответ Джозефа Симпсона для решения.
lukkea

5
@lukkea Я последовал ответу Джозефа Симпсона и подтвердил, что все мои проекты используют AnyCpu. У меня все еще была проблема, описанная здесь. Мне помог простой перезапуск VS. Это не первый раз, когда VS2012 имеет такие проблемы (и не только на моей машине). Я согласен с вами, что это нехорошее решение, но если с проектом все в порядке, это может быть единственной помощью. Однако следует проверить, не помогает ли очистка и восстановление.
Саша

2
Если бы только «включение и выключение» решило бы все мои проблемы. По-прежнему удивительно, сколько всего исправлений. Немного неловко, что мне пришлось перейти в stackoverflow, чтобы мне напомнили об этом, но я нашел этот ответ полезным.
Ричард Гарсайд,

2
@lukka иногда визуальная студия является основной проблемой, и ее решение
JSON

1
Все еще работает для VS2019 ....
Трональд

47

Если вы используете NUnit, а не MSTest, вам понадобится расширение тестового адаптера NUnit для Visual Studio 2012/2013.


9
Это помогло мне понять, что мне нужно установить «Тестовый адаптер NUnit 3»: marketplace.visualstudio.com/…
Westerlund.io

11
В VS 2019 мне удалось установить адаптер из диспетчера пакетов nuget.org/packages/NUnit3TestAdapter
майлон

Согласно этой странице, вам также необходимо установить Microsoft.NET.Test.Sdkс Nuget
BlueRaja - Danny Pflughoeft

В VS 2017 я установил тестовый адаптер Extension Nunit 3, и он сработал.
Боб Локерс,

1
В VS 2019 я также установил тестовый адаптер Extension Nunit 3, и он работал. Одно замечание: мне также нужно было обновить Visual Studio.
Боб Локерс,

43

Мне пришлось изменить свои методы тестирования async, чтобы вернуть Task вместо void.

После этого тесты были активны и запускались в обозревателе тестов.


1
Невозможно дождаться завершения метода async void. Async void - это «выстрелил и забыл». Вот почему они не могут быть проверены.
Ketobomb

Фейспалминг, который я сделал, когда прочитал это, эхом разнесся по земле ... Спасибо, что указали на мою глупость. Это сработало для меня. Проголосовали за
JP Chapleau

Хотя и подан в категорию "нет духа". Я бы хотел, чтобы за это проголосовали больше, поскольку это супер-очевидно, что ваш возвращаемый тип должен быть Task, но его легко забыть (потому что, похоже, ни один другой модульный тест в мире не возвращает ничего, кроме void) и отправляет вас в кроличью нору исправления вашего устройства протестируйте конфигурацию, когда нет реальной проблемы с конфигурацией. Очень жаль, что это просто вызвало компилятор или, по крайней мере, вызвало ошибку времени выполнения.
pat8719

2
@ pat8719, похоже, неплохая идея для анализатора кода. Их не так уж сложно написать. Я просто выписал xunit факт выполнения, async void Foo()и их анализаторы не жаловались, но они, безусловно, могли бы добавить тот, который будет. cc: @bradwilson
benmccallum

22

Проверьте, для какой платформы написаны тесты (например, nunit, xunit, VS test и т. Д.), И убедитесь, что у вас установлен правильный тестовый адаптер / расширение runner.

Для меня отсутствовал тестовый адаптер NUnit 3, и я подтвердил номер версии, просмотрев версию зависимости nunit.framework (выберите .dll в дереве зависимостей в обозревателе решений и нажмите F4, чтобы открыть окно свойств).


2
Примечание для себя: Ссылка на мой оригинальный проект MSTest Microsoft.VisualStudio.QualityTools.UnitTestFramework(не знаю, какая версия). Решенные проблемы, из-за которых метод не запускался (или не был найден) путем удаления этой ссылки и установки последней версии (v2.1.0) MSTest.TestAdapter (и Framework)
Адам Кокс,

@AdamCox Microsoft.VisualStudio.TestTools.UnitTestingустарел? У меня было несколько тестов, использующих это, которые внезапно перестали работать, как указано выше, после повторного добавления некоторых ссылок на проект, от которого они зависели.
ebyrob

@ebyrob, ответ Афанасия ниже может быть актуальным. Похоже, ему пришлось не только обновить / обновить пакеты MSTest. *, Но также добавить некоторые зависимости и исправить некоторые перенаправления привязки. Проверьте вывод предупреждений.
Benmccallum

16

TL; DR: обновите пакеты тестирования, посмотрите на вывод -> тестовая консоль

Я боролась с этим полтора дня. Итак, вот что я сделал, чтобы решить эту проблему:

симптомы

  1. 5 проектов модульного тестирования, все доступны в TestExplorer
  2. 2 из 5 выполнены правильно
  3. 3 заявив, что не запускается вообще
  4. Проблема началась после обновления .net framework

изучение

Поскольку все пакеты были обновлены во время обновления .NET Framework, я начал с различий между рабочими и неработающими проектами. Первой подсказкой было то, что все 3 проекта использовали: MSTest.TestAdapter и MSTest.TestFramework.

Естественно, я пошел в -> Консоль вывода -> Выпадающее меню Тест в VS 2019 и посмотрел на результат. Ничего полезного там нет.

Первый шаг решения : обновите MSTest.TestAdapter и MSTest.TestFramework до версии 2.0.0.

Шаг второй решения : Теперь консоль вывода -> выпадающий список Test начал показывать один за другим отсутствующие пакеты и неправильные перенаправления привязки.

Шаг третий : добавьте недостающие пакеты вручную. Для меня это были

  1. System.Runtime.Extentions
  2. System.Reflection
  3. Может быть, еще немного, что мне не хватает

Шаг 4 решения : Удалены / исправлены необязательные перенаправления привязки.

Надеюсь, это поможет кому-то другому.


Ты спас меня в те полтора дня! Я обновил проект версии 4.5 FW и попытался удалить все ненужное из пакетов и оказался в такой ситуации. Спасибо!
Нуман

Думаю, я испытал нечто подобное. В конце концов я просто воссоздал проект с нуля. Судя по всему, в файле * .csproj есть строчка, которая устанавливает, ToolsVersionи удар шахты все испортил. Все, что я могу сказать, это «берегитесь покупателя» для модульного тестирования MS и будьте готовы заменить ваши файлы * .csproj в любой момент, этот материал тесно интегрирован и очень зависит от версии.
ebyrob

Спасибо, хотя это и не является моей проблемой, совет по проверке вывода консоли показал мне ошибку (в методе DBContext Dispose была ошибка), которая препятствовала запуску моих тестов.
Иэн Карлин


11

Я обнаружил, что в проекте нет ссылки на сборку Microsoft.VisualStudio.QualityTools.UnitTestFramework . Вместо этого он ссылался на Microsoft.VisualStudio.TestPlatform.TestFramework и Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions . Когда я удалил эти две ссылки и добавил ссылку на сборку Microsoft.VisualStudio.QualityTools.UnitTestFramework, тесты, которые ранее были отмечены синим восклицательным знаком, внезапно стали активными и начали работать.

Модульные тесты не запускаются с неправильной сборкой

При правильной сборке тесты запускаются


3
После перехода с .NET Framework 4.6.2 на .NET Framework 4.7.2 мои тесты больше не выполнялись. После нескольких часов попыток у меня сработало только это решение.
Эрик Бержерон,

После перехода с .NET Framework 4.6.2 на .NET Framework 4.7.2 мне пришлось удалить все перенаправления привязки в app.config
bkwdesign

11

У меня была эта проблема, и для меня она была вызвана наличием нескольких тестовых проектов с разными версиями:

  • MSTest.TestAdapter
  • MSTest.TestFramework

Объединение пакетов nuget для проектов, чтобы они были одинаковыми, решило проблему для меня.


1
Этот ответ помог мне найти аналогичную причину. В моем случае некоторые тестовые проекты имели ссылки на Microsoft.VisualStudio.TestPlatform.TestFramework (и не запускались), в то время как другие имели ссылки на Microsoft.VisualStudio.QualaityTools.UnitTestFramework (которые были проектами, которые будут запускаться).
младший

11

Была такая же проблема после чистой установки VS 2019. Тесты обнаружены, но не выполняются с сообщением «Произошла непредвиденная ошибка». Исправлено настройкой x64 вместо x86, который был выбран по умолчанию.

введите описание изображения здесь


4
Это было исправление для меня, наряду с перезапуском VS и удалением папки .vs. Спасибо.
Дональд. Запись

Не могу поверить, что это все еще проблема ... Надеюсь, Microsoft в какой-то момент выдала какое-то предупреждение об этой классической загвоздке.
Гийом ЛаХэй,

8

В моем случае это произошло потому, что в одном тестовом проекте в моем решении были установлены пакеты nuget MSTest.TestFramework и MSTest.TestAdapter, а в других - нет. Очевидно, эти пакеты не требовались для запуска тестов, пока они не были установлены в одном проекте решения.

Проблема была устранена путем установки этих пакетов в тестовые проекты, в которых они отсутствовали.


В моем случае это полная противоположность: любой проект модульного тестирования, в котором есть пакеты Nuget MSTest, не будет запускаться, в отличие от других. Странный.
Palle

Решено : у меня есть файл .testsettings. Для пакетов MSTest требуется файл .runsettings. Вот почему тесты не проводятся.
Palle


7

Установка Nunit3TestAdapterNuget решила эту проблему


это также устранило мою проблему! :)
Эру

6

введите описание изображения здесь

Установка архитектуры процессора для проектов AnyCPU в обозревателе тестов устранила мою проблему! Смотрите скриншот выше.


Спасибо большое! Мне помогло =)
Александр Братцев

4

В моем случае у меня был async voidметод, и я заменил его async Task, поэтому тестовый запуск, как я ожидал:

    [TestMethod]
    public async  void SendTest(){}

заменить :

    [TestMethod]
    public async  Task SendTest(){}

1
Это была моя проблема
Кайл Делани,

4

Вы можете просмотреть выходные данные об ошибках вашего средства запуска тестов, открыв панель «Вывод» (просмотр -> вывод) и выбрав «тесты» в раскрывающемся списке «Показать вывод из».

показать вывод из


Кроме того, если у вас установлен Resharper, вы можете открыть тестовый файл и навести указатель мыши на кружок рядом с тестом, чтобы получить дополнительную информацию об ошибке.

Выход Resharper

Щелкнув по нему, вы попадете в окно с более подробной информацией. Кроме того, вы можете открыть это окно, перейдя в Extensions -> Reshaper -> Windows -> Unit Test Exploration Results.

Исследование модульного теста Resharper


3

У меня были такие же симптомы.

Убедитесь, что у вас установлено правильное расширение Visual Studio через Инструменты - Расширения и обновления. В моем случае мне пришлось установить XUnit и Specflow из опции Online.

Затем очистите раствор и восстановите его.

Если это все еще не помогает, очистите временный каталог (найдите% temp% в поиске в меню «Пуск» и удалите все содержимое в Temp)

И затем, наконец, попробуйте удалить Resharper, который, наконец, устранил мою проблему.


4
Удалить Resharper ?! Я не думаю, что это решение ^^
Стив Рэйкбрандт

2

Вот это был тестовый проект, не отмеченный для постройки:

Сборка -> Диспетчер конфигураций ... -> проверьте сборку для вашего тестового проекта


2

Поскольку я попал сюда с такой ошибкой, я публикую свою проблему / решение:

Симптомы:

  • Не все тесты запущены, но они не зависят от проекта, только некоторые из них были выполнены.
  • Все казненные были зелеными.
  • Стек технологий: ядро ​​dotnet / XUnit / FluentAssertions
  • Все тесты обнаружены и обновлены, если изменились.
  • Их можно было выполнить, выбрав или запустив несколько раз «Не запущенные тесты».

Проблема:

В коде произошла ошибка, которая вызвала исключение внутри другого потока. Все утверждения теста пройдены, но выполнение теста было отменено. Я видел ошибку в «Выводе тестов» (NullException).


+1 Пробовал отлаживать конкретный тест. Когда я, наконец, провел еще один, более простой тест, я смог отладить конкретный тест. Этот ответ заставил меня попробовать это.
Halvard

2

Были те же симптомы, в моем случае это была версия SDK ядра dotnet. проблема была в .

Проекты были нацелены на 2.2 и могли строить с использованием 3.0. После установки последней версии 2.2 SDK они смогли запустить.


2

Эта проблема также наблюдается, когда выполняемый метод тестирования выдает исключение StackOverflowException , заставляя средство выполнения теста прервать выполнение теста, что приводит к выходу0 tests run .

Чтобы найти виновника и устранить его, установите точку останова в начале декорированных методов TestInitialize и TestMethod , запустите модульный тест в режиме отладки, продолжайте переходить (F10) до тех пор, пока не возникнет исключение.


2

Пробовали много вариантов с Visual Studio 2019 версии 16.4.6 и Microsoft.VisualStudio.TestTools.UnitTesting, но пока единственный способ успешно запустить тесты - это вызвать следующую команду в консоли.

dotnet test

Тесты обнаруживаются в обозревателе тестов, но результат - «Не выполнено».

Обновление Visual Studio не помогло.

Решили проблему с сообщением «Ни один тест не соответствует заданному фильтру тестового набора FullyQualifiedName», запустив обновления до последней версии для следующих пакетов:

Microsoft.NET.Test.Sdk
MSTest.TestAdapter
MSTest.TestFramework

2

На этот вопрос уже есть много ответов, но у меня был другой сценарий и решение.

Мы переместили функциональность тестируемого типа из одного класса в новый и, таким образом, создали новый тестовый класс, при этом старый тестовый класс оказался пустым.

Оригинал:

  • Старый тестовый класс
    • Метод инициализации теста
    • Методы испытаний

Разбитая:

  • Старый тестовый класс (инициализатор сохранен, класс сохранен как заполнитель на будущее)
    • Метод инициализации теста (остается сам по себе)
    • Нет методов тестирования (оригинальные методы тестирования появляются в средстве выполнения тестов, но не существуют в коде, поэтому никогда не выполняйте)
  • Новый тестовый класс
    • Метод инициализации теста
    • Методы испытаний

Исправлена:

  • Старый тестовый класс (удален)
  • Новый тестовый класс
    • Метод инициализации теста
    • Методы испытаний

Очистите проект, закройте Visual Studio, удалите папку TestResults, затем перезапустите VS, а затем перестройте проект. (Это само по себе может решить вашу проблему, но для меня этого было недостаточно, пока не был удален старый тестовый класс.)


«Очистите проект, закройте Visual Studio, удалите папку TestResults, затем перезапустите VS, затем перестройте проект. (Одно это может решить вашу проблему, но для меня этого было недостаточно, пока не был удален старый тестовый класс.)» - Исправлено это для меня :)
Стефан Райер

2

У меня было другое решение для запуска моих тестов. Моя глобальная папка пакетов не соответствовала тому, что было в моем .csproj Вот как выглядел мой .csproj: UnitTest .csproj

Мне пришлось изменить мою версию на 16.5.0, которая, как я обнаружил, была установлена ​​в моей папке глобальных пакетов. Теперь мои тесты могут выполняться:.nuget обозреватель папок


1

Для меня решением было изменить настройки Resharper Unit Testing «Архитектура платформы по умолчанию» на «x64».

введите описание изображения здесь


Это решило мою проблему с проектом .NET Core 3.1, который отказывался выполнять тесты в обозревателе тестов. Ничего другого не исправит, кроме этого.
J_L

1

Для меня перезапуск VS2017 не сработал. Мне пришлось очистить sln, затем я нашел файл с тестами, которые не запускались, и запустил только этот файл. После этого я все запустил, и он снова заработал нормально.


1

У меня была другая версия пакетов nuget NUnit (3.11.0) и NunitTestAdapter (3.12.0). Когда я обновил NUnit до 3.12.0, Visual Studio запустила тесты.


1

В моем случае это помогло обновить пакеты MSTest nuget. Можно было воспроизвести эту проблему даже в пустом проекте MSTest, и обновление пакетов работало.


1

Для меня такое поведение было вызвано наличием свойства TestContext в базовом классе. Например:

[TestClass]
public abstract class TestClassBase
{
    protected object TestContext { get; private set; }
}

[TestClass]
public class TestClass : TestClassBase
{
    // This method not found
    [TestMethod]
    public void TestCase() {}
}

1

По вашим атрибутам я могу сказать, что вы используете MSTest. У меня была аналогичная проблема: мои тесты отображались в обозревателе тестов, но когда я пытался их запустить (либо выбирая «Выполнить все», либо выбирая их индивидуально), они не появлялись.

Моя проблема заключалась в том, что я создал проект модульного теста вручную из пустого проекта библиотеки стандартных классов .NET. Я установил MSTest.TestFrameworkпакет NuGet, но неMSTest.TestAdapter пакет. Как только я установил пакет адаптеров, они заработали должным образом.

Оглядываясь назад, это кажется очевидным, но когда вы создаете проекты модульных тестов на основе шаблона, вы принимаете эти вещи как должное.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.