Visual Studio 2015 или 2017 не обнаруживает модульные тесты

редактировать 2016-10-19:

первоначальный вопрос был о проблеме, специфичной для VS2015 CTP6 с тестовым бегуном XUnit. Из ответов ясно, что существует гораздо более широкая проблема с обнаружением модульного теста в Visual Studio, которая может возникать во многих различных ситуациях. Я очистил свой вопрос, чтобы отразить это.

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

многие другие ответы также оказались полезными для лучшего понимания тонкостей VS test runner. Я ценю, что люди все еще делятся своими решениями!


исходный вопрос 2015-04-10:

со вчерашнего дня мой Visual Studio Test Explorer не будет обнаруживать тесты для любого из моих проектов. Он также не показывает зеленую панель загрузки после строительства.

когда я иду в Visual Studio Test Explorer и нажмите "Запустить все", или когда я щелкните правой кнопкой мыши любой метод тестирования и выберите "запустить тесты", я получаю следующее В окне вывода:

Could not load file or assembly 'Microsoft.VisualStudio.Web.ProjectSystem, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

я запускаю Visual Studio 2015 CTP 6 в Windows 10 Pro Technical Preview, сборка 10041. Версия .NET Framework, похоже, не имеет значения - это происходит на 4.0, 4.5.2 и 4.6.

я пробовал со следующими фреймворками тестирования, и все они дают то же самое поведение:

  • Microsoft.VisualStudio.QualityTools.UnitTestFramework v14.0.22609.0
  • xunit v2.1.0-beta1-build2945 С xunit.runner.visualstudio v2.1.0-beta1-build1051
  • NUnit v2.6.4 С NUnitTestAdapter v2.0.0

я нашел проблему на GitHub (xunit), которая оказалась похожей: не удается получить тесты обнаружены #295, С этим комментарием от команды xunit:

имейте в виду, что Visual Studio 2015 CTP 5, Как сообщается, сломан многими людьми с модульным тестированием в целом (не только xUnit.net), так не ожидай, что это сработает.

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

я попробовал их предложение удалить папку %TEMP%VisualStudioTestExplorerExtensions. К сожалению, это не решило проблему.

я заметил, что ReSharper на самом деле is возможность обнаружить некоторые тесты. Он работает только для тестов VS и NUnit, а не для xunit.

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

30 ответов


к моему удивлению, очистка временных файлов, расположенных в %TEMP% каталог решил проблему для меня.

Примечание: этот путь обычно в C:\Users\(yourusername)\AppData\Local\Temp

как @Warren-P включены, вы можете перейти к папке temp, поставив в %temp% в меню "Пуск" или запустите "проводник" и введите %temp% в адресной строке.


возможно, Ваши коды компилируются с x64, поэтому необходимо включить архитектуру процессора по умолчанию как X64.

Test > Test Settings > Default Processor Architecture > X64

  • проверить, если NUnit Тестовый Адаптер 2/3 устанавливается в VisualStudio.
    (Tools>Extensions and Updates )

  • убедитесь, что выбрана правильная архитектура процессора-это:
    (Test>Test Settings>Default Processor Architecture)


изменить 2016-10-19 (сценарий PowerShell)

эта проблема по-прежнему возвращается время от времени. Я написал небольшой фрагмент PowerShell для автоматизации очистки соответствующей папки/файлов кэша / temp для меня. Я делюсь им здесь для будущих читателей:

@(
"$env:TEMP"
"$env:LOCALAPPDATA\Microsoft\UnitTest"
"$env:LOCALAPPDATA\Microsoft\VisualStudio.033\SpecificFolderCache.xml"
"$env:LOCALAPPDATA\Microsoft\VisualStudio.033\ProjectTemplateMRU.xml"
"$env:LOCALAPPDATA\Microsoft\VisualStudio.0\ComponentModelCache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio.0\Designer\ShadowCache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio.0\ImageLibrary\cache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio Services.0\Cache"
"$env:LOCALAPPDATA\Microsoft\WebsiteCache"
"$env:LOCALAPPDATA\NuGet\Cache"
) |% { Remove-Item -Path $_ -Recurse -Force }

не забудьте закрыть Visual Studio заранее, и, вероятно, это хорошая идея для перезагрузки после этого.

Удаление папки TEMP может не потребоваться и в некоторых случаях даже нежелательно, поэтому я бы рекомендуется сначала попробовать без очистки папки TEMP. Просто опустите "$env:TEMP".

оригинальный ответ 2015-04-12

проблема была "решена" после тщательной очистки связанных с Visual Studio папок temp/cache.

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

это точные шаги, которые я принято:

  1. Закрытая Visual Studio
  2. используется CCleaner для очистки системы и браузера temp файлы/папки
  3. вручную очищено / удалено следующее файлы / папки:

    • %USERPROFILE%\AppData\Local\assembly
    • %USERPROFILE%\AppData\Local\Microsoft\UnitTest
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio.033\SpecificFolderCache.xml
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio.033\ProjectTemplateMRU.xml
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio.0\ComponentModelCache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio.0\Designer\ShadowCache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio.0\ImageLibrary\cache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio Services.0\Cache
    • %USERPROFILE%\AppData\Local\Microsoft\WebsiteCache
    • %USERPROFILE%\AppData\Local\NuGet\Cache
    • %USERPROFILE%\AppData\Local\Temp

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


в Visual Studio 2015 (обновление 3) Если вы хотите прикрепить тесты в проводнике тестов, то должны установить NUnit Тестовый Адаптер.Загрузите адаптер из Tools - >Extension And Updates - > вкладка Online (вам нужно найти адаптер) - >Download. При перезапуске Visual Studio можно увидеть изменения для тестовой платформы.


у меня нет полного ответа на это, но я определил некоторые вещи, играя с тестовым проектом:

  1. на xunit.runner.aspnet : 2.0.0-aspnet-beta4 похоже, что это часть официального выпуска beta4 aspnet5 не работает в Visual Studio.
  2. вместо этого, используя "xunit": "2.1.0-*" и "xunit-runner.dnx": "2.1.0-*" пакеты работают в Visual Studio.
  3. чтобы VS обнаружил тесты, ваш проект должен иметь одну команду с именем "test", которая запускает " xunit.бегун.DNX на". Добавление дополнительных команды могут сломать его.
  4. если окно Проводника тестов по-прежнему остается пустым, удалите команду "тест" из проекта, затем заново создайте решение, а затем добавьте команду "тест" обратно в проект.формат JSON.
  5. очистка всех ваших тайников в соответствии с предложением @Fred-Kleuver может помочь, но я не сделал все шаги в изоляции, поэтому я не уверен.

это актуально в соответствии с VS 2015 CTP 6, используя выпуски beta4, а не ежедневные.


у меня был случай, когда тесты не будут подобраны, потому что я сделал их async следующим образом:

public async void This_IsMy_UnitTest()

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

это не было примерно после 3 clean и сборки + перезапуск VS.NET что я видел тестовый запуск и сбой, указывающий, что я забыл добавить Task тип возврата:

public async Task This_IsMy_UnitTest()

после обновления модульные тесты были найдены и работали правильно. Это может быть крайний случай, но имеющий async тесты для использования await внутри, но не имея правильной подписи, может вызвать эту же проблему, и это не первый раз, когда я это сделал.


перейдите в Диспетчер пакетов Nuget и загрузите адаптер Nunit следующим образом.

enter image description here


У меня был тот же pronlem, но папка "%TEMP%\VisualStudioTestExplorerExtensions" не существовала на моей машине, так как я читал сообщения, у меня была идея создать его, и он работает. Теперь test explorer может показывать все мои тесты. Спасибо.


решение в моем случае было просто установить NUnit 3 Тестовый Адаптер расширение для моей Visual Studio 2015.

'Extensions and Updates' is present under 'Tools' meue


в моем случае (Visual Studio Enterprise 2015 14.0.25425.01 Update 3, Resharper 2016.2) мне просто нужно было сделать очистить решение из меню построение. Затем перестроение решения вызывает "пробуждение" проводника тестов и снова находит все тесты.


просто перезагрузка Visual Studio и в Обозревателе тестов выполните "выполнить все"... Тогда все мои тесты будут открыты.


в моем случае проблема была "между стулом и клавиатурой". Я переключился на конфигурацию в Configuration Manager, которая не включала мои проекты модульного тестирования при сборке. Переключение обратно в конфигурацию (например, Debug), которая включает все проекты, исправило проблему.


в моем случае MSTest под VS 2015 игнорировал тесты с именами тестов (т. е. методов), которые были длиннее 174 символов. Сокращение названия позволило сделать тест видимым. Это было определено с помощью guess-and-check путем манипулирования именем теста.


это, вероятно, не поможет большинству людей, но кто-то неопытный в модульном тестировании написал метод тестирования, который вернул bool вместо void:

[TestMethod]
public bool TestSomething()

изменение типа возврата до void Исправлена проблема.


убедитесь, что у вас есть xunit.runner.visualstudio пакет в пакетах тестовых проектов.config, а также правильно восстановлен.

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


Я просто хотел бы добавить, что я нашел совершенно другое решение для вышеперечисленных.

Я объявил свой тестовый класс, как показано ниже:

[TestClass]
class ClassificationTests
{
   //unit tests
}

Как только я добавил public модификатор для класса, он работал так, как ожидалось!


Если вы нацеливаете .NET Standard или .NET Core, вам нужно использовать пакет NuGet для тестового адаптера NUnit и Не расширение.

рекомендуется установить адаптер из NuGet, если вы тестируете проекты .NET Core или .NET Standard. Адаптер VSIX не поддерживает и не будет поддерживать .NET Core, поскольку пакеты VSIX не могут быть нацелены на несколько платформ.

источник: NUnit GitHub Wiki

.

также проверьте FAQ там:

мои тесты не отображаются в Visual Studio в 2017?

  • вы используете пакет NuGet?
  • вы используете версию 3.8.0 или новее пакета NuGet?
  • ваши тесты нацелены на .NET Core или полную .NET Framework? (см. выше)
  • вы добавили ссылку на пакет в Microsoft.Сеть.Тест.Sdk?
  • вы перезапустили Visual Studio? Это все еще немного темпераментно.

источник: NUnit GitHub Wiki


появляется, чтобы поделиться моим решением. Я был в Windows 10, Visual Studio 2015, NUnit 3.5, NUnit Test Adapter 3.6 (через NuGet, а не расширение VISX), и ни один из моих тестов не был обнаружен. Моя проблема заключалась в том, что в проекте тестов моего решения каким-то образом ярлык для моей папки "Документы" был создан в папке проекта. Я предполагаю, что тестовый адаптер видел ярлык и зависал, пытаясь понять, что с ним делать, в результате чего не удалось отобразить блок тесты.


удаление файла \AppData\Local\Microsoft\VisualStudio\14.0\1033\SpecificFolderCache.xml решил проблему для меня.


Я также был укушен этой замечательной маленькой функцией, и ничто из описанного здесь не работало для меня. Это было до тех пор, пока я дважды не проверил результат сборки и не заметил, что соответствующие проекты не строятся. Посещение configuration manager подтвердило мои подозрения.

Visual Studio 2015 с радостью разрешила мне добавлять новые проекты, но решила, что не стоит их создавать. Как только я добавил проекты в сборку, он начал играть красиво.


Я решил это, изменив X64 на : Щелкните правой кнопкой мыши на project - > Properties - > Build - > Platform target - > Any CPU


каким-то образом мой проект был настроен на компиляцию как Статическая Библиотека (.lib). После изменения этого на Динамическая Библиотека (.dll файлы), тесты, правильно обнаруженные Visual Studio 2012.

My Unit Test Project ->
Properties ->
Configuration Properties ->
General ->
Configuration Type

Это случилось со мной, потому что мой тестовый проект содержал app.config. Он был автоматически добавлен пакетами NuGet для перенаправления сборки, но мои тесты, казалось, работали нормально без него.

см.:https://developercommunity.visualstudio.com/comments/42858/view.html.


Мне было так легко исправить эту проблему, как:

  • выберите проект модульного тестирования
  • Нажмите кнопку "Показать все файлы" в обозревателе решений, и новые временные файлы появятся в дереве файлов обозревателя решений в "obj\x86\Debug".
  • удалить эти временные файлы и пересобрать проект.
  • Retried для запуска тестов и работал!.

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


Я боролся с той же проблемой для vstest framework и моих собственных модульных тестов.

Итак, после выполнения всех тех вещей, о которых вы упоминали ранее, я удалил каждое появление символа " # " в пути к каталогу моего решения. Это действительно работает.

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


эта тема несколько устарела, но мое решение отсутствующего состояния теста в VS2015:

состояние задачи отображается только в конфигурации Debug buildconfiguration. Конечно, это также делает невозможным отладку вашего теста через test-explorer.


убедитесь, что ваш класс и общественные, а не частная.