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

Я боролся с VS 2017, так как я установил его. Теперь кажется, что модульные тесты будут запускаться только из командной строки "dotnet test".

Мой проект.NET Core 1.1.1. У меня есть SDK и обновление фреймворка для 1.1.1.

Я попробовал образец на MSDN ( https://msdn.microsoft.com/en-us/library/ms182532.aspx), который также не работает точно так же.

Все пакеты NuGet для тестов и основного проекта являются актуальными. И тестовый проект и основной проект строят без ошибок. Тесты успешно запускаются из командной строки.

Кто-нибудь получил юнит-тесты для запуска в VS 2017, если да, то как?

Спасибо Джон


Обновление - Расширить

Вот пример простого тестового проекта, который не работает на GitHub. Это пример с xUnit, но я пробовал NUnit и визуальную студию, встроенную в MS тесты. Независимо от того, какое тестирование или какие изменения я делаю, я не могу заставить тестировщика VS найти какие-либо тесты.

Что я пробовал

  • Удаление файлов кеша теста VS DEL %TEMP%\VisualStudioTestExplorerExtensions
  • Перезапуск VS
  • Проводник тестов закрытия / открытия
  • для xUnit установлен Microsoft.DotNet.InternalAbstractions ( см. ТАК сообщение)
  • для NUnit убедитесь, что адаптер установлен и та же версия (3), что и в пакете NUnit
  • test -> test settings -> default processor architecture установлен на x86

Вопрос
Может ли кто-нибудь предоставить рабочий пример решения.Net Core 1.1.0 в VS2017 (файлы проекта.csproj), где проводник тестов VS успешно находит модульные тесты ИЛИ покажите мне проблему в приведенном примере.

42 ответа

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

Пример использования диспетчера пакетов NuGet:

Это просто сработало для меня (не знаю, является ли это результатом изменения рабочих пространств, которые что-то повредили):

Удаление файлов кэша теста VS в%TEMP%\VisualStudioTestExplorerExtensions и перезапустите VS2017.

API для тестовых адаптеров для.NET Core изменился с выпуском Visual Studio 2017 и переходом от project.json отформатировать в csproj формат. Это сделало существующие dotnet-test-* адаптеры как dotnet-test-nunit устарели.

Адаптеры были обновлены, но способ настройки и запуска тестов в Visual Studio или в командной строке dotnet test требует разных ссылок в ваших тестовых проектах. Остерегайтесь любой документации, которую вы найдете в справочных пакетах dotnet-test-* формат, потому что они устарели.

Во-первых, ваш тестовый проект должен быть нацелен на конкретную платформу:.NET Core или.NET Framework. Он не может быть нацелен на.NET Standard, даже если тестируемый вами код является.NET Standard. Это связано с тем, что цель тестов указывает, на какой платформе должны выполняться тесты. .NET Standard похож на PCL (Portable Class Library) в том, что он может работать на многих платформах.

Далее нужно добавить ссылки на Microsoft.NET.Test.Sdk, ваш тестовый фреймворк и совместимый тестовый адаптер. Для NUnit ваши ссылки будут выглядеть так,

<itemgroup>
    <packagereference Include="Microsoft.NET.Test.Sdk" Version="15.0.0"></packagereference>
    <packagereference Include="NUnit" Version="3.7.1"></packagereference>
    <packagereference Include="NUnit3TestAdapter" Version="3.8.0"></packagereference>
</itemgroup>

Комментарий выше упоминает добавление,

<ItemGroup>
    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
</ItemGroup>

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

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

Для получения дополнительной информации см. Тестирование.NET Core с NUnit в Visual Studio 2017

Забудьте сделать тестовый класс общедоступным, чтобы не было обнаружено методов теста внутри

У меня был проект xUnit по умолчанию, и я удалил образец UnitTest1.cs, заменив его тестовым классом контроллера, с парой тестов, но ни один не был найден

Короче говоря, после обновления пакетов xUnit, Test.Sdk, xUnit.runner и перестройки проекта я обнаружил ошибку сборки:

Ошибка xUnit1000 Тестовые классы должны быть открытыми

К счастью, обновленная версия выбросила это исключение, чтобы избавить меня от проблем

Модификация тестового класса для публичного исправления моя проблема

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

  • Сначала закройте все открытые экземпляры Visual Studio и удалите эту папку: %TEMP%\VisualStudioTestExplorerExtensions .( Запуск тестов в Visual Studio)
  • Перейдите в менеджер пакетов Nuget и сначала установите Microsoft.NET.Test.Sdk(15.3.0-preview-20170425-07), а затем установите xunit.runner.visualstudio(2.3.0-beta1-build1309). Смотрите прикрепленный скриншот Nuget, чтобы увидеть все пакеты, которые мне пришлось установить, чтобы получить последнюю версию VS 2017 для обнаружения моих тестов. Скриншот Nuget

В моем случае я нацеливаю тестовый проект на x64 Архитектура и настройка теста Архитектура (test-> Архитектура процессора по умолчанию) изменена на x86, Они не совпадали.

После того, как вернули тестовую настройку Архитектура в x64 и восстановить все тесты были обнаружены снова.

Для меня проблема была я ошибочно поместил тестовые случаи во внутренний класс

[TestClass]
  internal class TestLib {
}

это привело к тому, что тест-кейсы не были опознаны.

У меня были проблемы с VS 2017, когда я нашел свой UnitTest. Это была не та проблема, о которой говорил Джон, но это был первый результат в Google, который я искал, поэтому я хотел поделиться своей проблемой.

У меня было устаревшее решение, возвращающееся с VS2010 и переходящее на VS2013, VS2015. Теперь в VS2017 кажется, пространства имен для [TestMethod] Атрибут изменился.

До того, как он использовал

Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0

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

Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0

Поэтому я решил создать новый проект UnitTest из VS2017. Возможно, изменение ссылок на сборку для старого тестового проекта также сработало бы. С новой ссылкой VS2017 обнаружил эти юнит-тесты.

Не читайте устаревшие статьи под MSDN. Соответствующие материалы по.NET Core находятся на сайте docs.microsoft.com.

https://docs.microsoft.com/en-us/dotnet/articles/core/testing/

Вообще говоря, вам нужно консольное приложение.NET Core, содержащее примеры модульных тестов.

Убедитесь, что вы используете правильный Microsoft.NET.Test.Sdk:

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />

Не используйте предварительную версию. Или вы должны перейти на консольное приложение (не библиотека). У меня похожая проблема, но с последней версией (15.0.0) она снова начинает работать.

Также вам, возможно, придется добавить:

  <ItemGroup>
    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
  </ItemGroup>

но я не думаю, что это необходимо.

Я знаю, что OP перечислил это в своем контрольном списке, но этот момент легко упустить из виду при чистой установке Visual Studio 2017 и настройке нового проекта. Помимо шаблона проекта NUnit и NUnit Framework необходимо отдельно установить адаптер NUnit, например, с помощью команды NuGet Install-Package NUnit3TestAdapter -Version 3.9.0, После этого Visual Studio Community 2017 начал обнаруживать юнит-тесты без проблем.

В моем случае Test Explorer не смог найти мои тесты после того, как я переместил проект в новое решение.

Ответ был просто, что у меня была ссылка на старый MS Test Adapter в моем проекте.

У меня был дубликат строки ниже для версии 1.1.11 MS Test Adapter в моем файле cs.proj:

<Import Project="..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.props')" />

Решить проблему,

  1. Щелкните правой кнопкой мыши по проекту и выберите "Выгрузить проект".
  2. Щелкните правой кнопкой мыши проект и выберите "Изменить".
  3. Удалить строку, которая импортирует старую версию адаптера.
  4. Щелкните правой кнопкой мыши по проекту и выберите "Обновить проект".
  5. Восстановить решение / проект

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

Оказывается, мой тестовый класс не был публичным! Обнародование позволило VS открыть для себя тесты.

Для меня было проще создать новый тестовый проект, который прекрасно работает с Visual Studio 2017... и просто скопировать тестовые файлы, добавить ссылки и пакеты NuGet по мере необходимости.

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

открытие

Приведенные выше ответы не сработали (перезапуск, обновление до версии 1.1.18 ... Я уже обновился, удаление временных файлов, очистка кеша NuGet и т. Д.).

Я обнаружил, что у меня были разные ссылки на MSTest.TestAdapter и MSTest.Framework в разных тестовых проектах (у моего решения их два). Один был указан в 1.1.18 как...

packages.config

<package id="MSTest.TestAdapter" version="1.1.18" targetFramework="net461" />
<package id="MSTest.TestFramework" version="1.1.18" targetFramework="net461" />

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

Решение

Простое обновление моего packages.config до версии 1.1.18 - вот что восстановило функциональность моих модульных тестов в VS. Похоже, что есть некоторые ошибки, которые не допускают параллельные ссылки на библиотеки MSTest. Надеюсь, это поможет вам.

Больше информации:

  • Visual Studio 2017 Ent: 15.5.6 (я обновил с 15.0.1 с надеждой исправить эту проблему, но у меня было это в обоих)

Решение удаляло мое app.config файл из моего проекта модульного тестирования. Тесты появятся снова!

Этот файл ссылается на некоторые библиотеки DLL в связывающих каталогах, которых на самом деле не было в ссылках проекта. Повторно добавьте сборочные привязки, которые строго необходимы для вашего проекта.

В моем случае я столкнулся с той же проблемой, чтобы решить

  1. Я открыл консоль Windows (клавиша Windows + cmd).
  2. Перейдите в папку, в которой был создан проект.
  3. Выполненная команда "dotnet test" - это в основном тот же тест, который выполняет Visual Studio, но когда вы запускаете его через консоль, он позволяет вам увидеть полную трассировку.
  4. Я получил это сообщение об ошибке "Атрибут TestClass определен в закрытом классе MSTest.TestController.BaseTest"
  5. Итак, я пошел к тесту и пометил его как общедоступный, построил заново, и мои тесты отображаются правильно.

В моем случае это был проект, в котором я обновил тестовый проект с более ранней версии.Net. в app.config у меня были привязки к предыдущим версиям зависимых сборок.

После исправления сборочных привязок в app.config мои тесты были обнаружены.

Иногда смена пространства имен тестов работает. У меня была структура папок следующим образом:

A |___B | |___D |___C___E

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

Не забудьте построить свой проект!

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

Я установил пакеты инфраструктуры тестирования для всех тестовых проектов, как показано в принятом ответе. Затем удалил ссылки на старые качественные инструменты, перезапустил Visual Studio и теперь я вижу все тесты.

Удаление старого.dll должно помочь. Очистка временных файлов, расположенных в каталоге%TEMP% в C:\Users(имя пользователя)\AppData\Local\Temp

Убедитесь, что ваш тестовый класс и метод НЕ являются статическими.

В случае.NET Framework в тестовом проекте раньше были ссылки на следующие библиотеки DLL:

Microsoft.VisualStudio.TestPlatform.TestFramework
Microsoft.VisualStudio.TestPlatform.TestFramework.Extentions

Я удалил их и добавил ссылку на:

Microsoft.VisualStudio.QualityTools.UnitTestFramework

А потом все тесты появились и начали работать так же, как и раньше.

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

В моем случае ничто из перечисленного не поможет мне. Но я понижаю версию NUNit3TestAdapter до версии 3.8.0, затем обновляюсь до последней версии (3.10.0)

Проблема

Проблема в том, что Visual Studio "запутывается" из-за версий ядра dotnet на компьютере. Когда я зашел в панель управления -> удалить программы, у меня было 8 разных SDK с ядром dotnet и установленные среды выполнения. Это как-то заставляло VS молча иметь ошибку при попытке найти тесты.

Проверить проблему

Вы можете проверить проблему, перейдя в командную строку и получив версию dotnet. $ dotnet --version, Если вы видите что-либо, кроме последней установленной версии, значит, на вашем компьютере имеется некоторое несоответствие, и она не использует правильную версию. Пример... Если у вас есть ядро ​​dotnet 1.0.1 установлен, но когда вы получаете версию в командной строке, и он говорит 1.0.0 это проблема.

Решение

Удалить все старые вещи. Я начал с того, что мне нужно было удалить (самые старые версии dotnet rc), но при тестировании проблемы он все-таки дал неправильную версию. В конце концов я согласился сделать полную чистку. Я...

  • Удалил все приложения Visual Studio (на моей машине VS2015 и VS2017)
  • Деинсталлированы все версии ядра dotnet (даже самые последние)

После того, как моя машина была полностью пуста от всех VS и донета, я установил только VS2017 (он поставляется в комплекте с последним dotnet). Я создал тестовый проект xUnit, и тестовый проводник сразу нашел тест

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

Рекомендации

  • Смотрите сообщение в блоге @epestic, где он дает более подробную информацию об устранении проблемы.

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

Наконец я понизил Microsoft.VisualStudio.TestPlatform.TestFramework а также Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions пакеты до очень старой версии (с помощью диспетчера NuGet) и методы тестирования. Затем я обновился до последней версии, и все же там были.

Так что просто понизьте и обновите пакеты.

В моем случае, это был проект UWP, присутствующий в решении, вызвавшем проблему.

Когда я выгрузил проект UWP, тесты были обнаружены. Когда я загрузил его обратно, тест снова исчез.

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

образец репо

VS сообщение об ошибке

Для C++:

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

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

После этого пересоберите ваш тестовый проект, и тестовое обнаружение должно работать.

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

Для меня, изменение TargetFramework в тестовом проекте .csproj файл из

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

в

  <PropertyGroup>
    <TargetFramework>net46</TargetFramework>
  </PropertyGroup>

работал.

Проверьте, включен ли тестовый адаптер NUnit 3. В моем случае я уже установил его давным-давно, но вдруг он как-то отключился. У меня ушло довольно много времени, прежде чем я решил проверить эту часть...

Другие вопросы по тегам