Единичные тесты, не обнаруженные в Visual Studio 2017

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

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

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

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

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

Спасибо, Джон


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

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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Во-первых, ваш тестовый проект должен быть нацелен на определенную платформу .NET Framework или .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>

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

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

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

Ответ 4

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

  • Сначала закройте все открытые экземпляры 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

Ответ 5

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

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

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

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

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

Изменение класса теста для публичного исправления моей проблемы

Ответ 6

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

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

Ответ 7

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

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

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

Ответ 8

У меня были проблемы с 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 удалось обнаружить те модульные тесты.

Ответ 9

Убедитесь, что вы используете правильный файл 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>

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

Ответ 10

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

Ответ 11

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

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

У меня был дубликат строки ниже для версии 1.1.11 адаптера MS Test в моем файле 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')" />

Чтобы устранить проблему,

  • Щелкните правой кнопкой мыши проект и выберите "Выгрузить проект".
  • Щелкните правой кнопкой мыши проект и выберите "Редактировать"
  • Удалить строку, которая импортирует старую версию адаптера.
  • Щелкните правой кнопкой мыши проект и выберите "Обновить проект".
  • Реконструкция решения/проект

Ответ 12

для меня вопрос был я ошибочно размещены testcases во внутреннем классе

[TestClass]
  internal class TestLib {
}

что привело к тому, что контрольные образцы не были идентифицированы.

Ответ 13

Мне было легче создать новый тестовый проект, который отлично работает с Visual Studio 2017... и просто скопируйте тестовые файлы, добавьте ссылки и пакеты NuGet по мере необходимости.

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

Ответ 14

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

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

Ответ 15

открытие

Верхние ответы выше не работали для меня (перезагрузка, обновление до версии 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.

Решение

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

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

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

Ответ 16

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

Оказывается, мой тестовый класс не был публичным! Публикация позволила В.С. обнаружить тесты.

Ответ 17

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

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

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

sample repo

Отчет об ошибке VS

Ответ 18

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

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

Ответ 19

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

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

Так что просто снижайте и обновляйте пакеты.

Ответ 20

Для C++:

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

Если вы установили только Desktop Development с C++, то решение также должно установить Universal Development Platform с помощью дополнительных инструментов C++ Universal Windows Platform. Вы можете выбрать их в веб-установщике визуальной студии.

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

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

Ответ 21

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

Ответ 22

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

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

Ответ 23

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

Ответ 24

Проблема

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

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

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

Решение

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

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

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

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

Ссылки

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

Ответ 25

Сначала я пытался использовать MSTest. После этого я перейду на тест Nunit. Затем я хотел вернуть MSTest. Я удалил все коды и ссылки nUnit, но Test Explorer не показывал методы MSTest. Решение. Я удалил все ссылки mstest nuget и переустановил. Готово.

Ответ 26

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

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

к

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

работал.

Ответ 27

В моем случае проблема заключалась в том, что для типа проекта была установлена статическая библиотека (lib), и она должна быть динамической библиотекой (dll)

Ответ 28

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

В этом случае вам нужно выяснить, какой случай вызывает исключение stackoverflow.

Ответ 29

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

A |___B | |___D |___C___E

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

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

Ответ 30

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

NUnit 3 Test Adapter Disabled