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

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

EDIT 2016-10-19:

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

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

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


Оригинальный вопрос 2015-04-10:

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

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

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. К сожалению, это не устранило проблему.

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

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

4b9b3361

Ответ 1

EDIT 2016-10-19 (PowerShell script)

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

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

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

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

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

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

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

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

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

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

Ответ 2

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

Примечание. Этот путь обычно находится в C:\Users\(yourusername)\AppData\Local\Temp

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

Ответ 3

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

Test > Test Settings > Default Processor Architecture > X64

Ответ 5

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

  • xunit.runner.aspnet : 2.0.0-aspnet-beta4, который, как представляется, является частью официального релиза beta4 aspnet5, не работает в Visual Studio.
  • Вместо этого в Visual Studio работают "xunit": "2.1.0-*" и "xunit-runner.dnx": "2.1.0-*" пакеты.
  • Чтобы VS обнаружил тесты, ваш проект ДОЛЖЕН иметь команду SINGLE с именем "test" , которая запускает "xunit.runner.dnx". Добавление дополнительных команд может сломать его.
  • Если окно Test Explorer по-прежнему заканчивается пустым, УДАЛИТЕ команду "test" из вашего проекта, затем повторно постройте решение, а затем добавьте команду "test" обратно в project.json.
  • Очистка всех ваших кешей в соответствии с предложением Fred-Kleuver может помочь, но я не сделал все шаги изолированно, поэтому я не уверен.

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

Ответ 6

В Visual Studio 2015 (обновление 3), если вы хотите прикрепить тесты в тестовом проводнике, необходимо установить NUnit Test Adapter. Загрузите адаптер из Tools- > Extension And Обновления- > вкладка "Интернет" (вам нужно найти адаптер) → Загрузить. Путем перезапуска Visual Studio вы можете увидеть изменение для тестовой среды.

Ответ 7

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

Ответ 8

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

public async void This_IsMy_UnitTest()

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

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

public async Task This_IsMy_UnitTest()

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

Ответ 9

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

Ответ 10

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

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

Ответ 11

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

Ответ 12

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

Ответ 13

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

Ответ 14

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

[TestMethod]
public bool TestSomething()

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

Ответ 15

Просто перезапустите Visual Studio и в Test Explorer выполните "Запустить все"... Все мои тесты будут обнаружены.

Ответ 16

Убедитесь, что в тестовом проекте package.config установлен пакет xunit.runner.visualstudio.

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

Ответ 17

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

Я объявил свой тестовый класс следующим образом:

[TestClass]
class ClassificationTests
{
   //unit tests
}

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

Ответ 18

Решение в моем случае состояло только в том, чтобы установить расширение NUnit 3 Test Adapter на мою Visual Studio 2015.

Ответ 19

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

Ответ 20

Я допустил ошибку при создании async-методов, но вернул void.

Изменено: public async void Test()

To: public async Task Test()

Ответ 21

Я решил это, изменив X64 на: Щелкните правой кнопкой мыши проект → Свойства → Сборка → Цель платформы → Любой процессор

Ответ 22

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

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

Ответ 23

Если вы нацеливаете .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.NET.Test.Sdk?
  • Вы перезапустили Visual Studio? Это все еще немного условно.

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

Ответ 24

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

Смотрите: https://developercommunity.visualstudio.com/comments/42858/view.html.

Ответ 25

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

Ответ 26

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

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

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

Ответ 27

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

Ответ 28

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

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

Ответ 29

Убедитесь, что ваш класс с атрибутом [TestClass] является общедоступным, а не частным.

Ответ 30

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

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