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


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

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

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

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


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

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

когда я иду в 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, build 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. К сожалению, это не решило проблему.

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

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

30 142

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 / files для меня. Я делюсь им здесь для будущих читателей:

@(
"$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 Тестовый Адаптер.Загрузите адаптер с инструменты - > расширение и обновления - > вкладка онлайн (вы должны найти адаптер) - > скачать. Перезапустив Visual Studio, вы можете увидеть изменения для платформы тестирования.

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

  1. The 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. если окно обозревателя тестов по-прежнему остается пустым, удалите команду "test" из проекта, затем повторно создайте решение, а затем добавьте команду "test" обратно в проект.формат JSON.
  5. очистка всех ваших кэшей в соответствии с предложением @Fred-Kleuver может помочь, но я не сделал все шаги в изоляции, поэтому я не уверен.

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

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

public async void This_IsMy_UnitTest()

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

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

public async Task This_IsMy_UnitTest()

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

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

enter image description here

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

решение в моем случае было просто установить 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 пакет в пакетах тестовых проектов.конфигурация, а также то, что было правильно восстановлено.

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

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

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

[TestClass]
class ClassificationTests
{
   //unit tests
}

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

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

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

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

.

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

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

  • вы используете пакет NuGet?
  • вы используете версию 3.8.0 или новее пакета NuGet?
  • протестируйте свою цель .Чистая ядра или полный .Net фреймворка? (см. выше)
  • вы добавлены в базовый пакет для 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 на : Щелкните правой кнопкой мыши на проекте - > свойства - > сборка - > цель платформы - > любой процессор

каким-то образом мой проект был настроен на компиляцию как Статическая Библиотека (.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".
  • удалить эти временные файлы и пересобрать проект.
  • повторил для запуска тестов и работал!.

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

Я боролся с той же проблемой для фреймворка VSTest и моих собственных модульных тестов.

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

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

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

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

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