Я боролся с 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
( см. сообщение SO ) - для NUnit убедитесь, что адаптер установлен и та же версия (3), что и в пакете NUnit
test -> test settings -> default processor architecture
установлен на x86
Вопрос
Может ли кто-нибудь предоставить рабочий пример решения .Net Core 1.1.0 в VS2017 (файлы проекта .csproj), в котором проводник тестов VS успешно находит модульные тесты ИЛИ показать мне проблему в приведенном примере.
источник
app.config
файла в моем тестовом проекте: stackoverflow.com/a/47497668/67824 .Ответы:
В моем случае оказалось, что мне просто нужно обновить свои тестовые адаптеры и тестовую среду. Готово.
Пример использования диспетчера пакетов NuGet:
источник
Это просто сработало для меня (не знаю, является ли это результатом изменения рабочих областей, которые что-то повредили):
Удаление файлов кэша теста VS в% TEMP% \ VisualStudioTestExplorerExtensions и перезапустите VS2017.
источник
%TEMP%
- принесите окно команднойecho %TEMP%
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 ваши ссылки будут выглядеть так,Комментарий выше упоминает добавление,
Это не обязательно, но может помочь. Visual Studio автоматически добавляет его во все проекты модульных тестов, чтобы помочь ему быстро находить проекты с тестами.
Если ваши тесты не появляются в Visual Studio, первое, что нужно сделать, это закрыть свое решение, а затем снова открыть его. Кажется, в Visual Studio есть ошибки, которые не обнаруживают изменения в проектах при их редактировании.
Для получения дополнительной информации см. Тестирование .NET Core с NUnit в Visual Studio 2017
источник
У меня была та же проблема, и я получил ее, выполнив следующие действия:
источник
Microsoft.NET.Test.Sdk
похоже, работает для меня .. спасибо StackOverflow. (Решение .NET Framework WebApi 2)Забудьте сделать тестовый класс общедоступным , чтобы не было обнаружено методов теста внутри
У меня был проект xUnit по умолчанию, и я удалил образец UnitTest1.cs, заменив его тестовым классом контроллера, с парой тестов, но ни один не был найден
Короче говоря, после обновления пакетов xUnit, Test.Sdk, xUnit.runner и перестройки проекта я обнаружил ошибку сборки:
К счастью, обновленная версия выбросила это исключение, чтобы избавить меня от проблем
Модификация тестового класса для публичного исправления моя проблема
источник
public
класс, а только класс, поэтому он не обнаружит его, пока вы не добавитеpublic
идентификатор.В моем случае я нацеливаю тестовый проект на
x64
Архитектуру, а для параметра настройки архитектуры (test-> Default Processor Architecture) было изменено значениеx86
. Они не совпадали.После восстановления настроек теста для параметра Архитектура
x64
и повторного построения все тесты были обнаружены снова.источник
У меня были проблемы с VS 2017, когда я нашел свой UnitTest. Это была не та проблема, о которой Джон спрашивал, но это был первый результат в Google, который я искал, поэтому я хотел поделиться своей проблемой.
У меня было устаревшее решение, возвращающееся с VS2010 и переходящее на VS2013, VS2015. Теперь в VS2017 кажется, что пространства имен для
[TestMethod]
атрибута изменились.До того, как он использовал
Я создал новый Test.dll в проекте и тот, который используется по умолчанию
Поэтому я решил создать новый проект 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:
Не используйте предварительную версию. Или вы должны перейти на консольное приложение (не библиотека). У меня похожая проблема, но с последней версией (15.0.0) она снова начинает работать.
Также вам может потребоваться добавить:
но я не думаю, что это необходимо.
источник
Я знаю, что 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')" />
Решить проблему,
источник
Просто у меня была проблема с Visual Studio, которая не могла найти мои тесты, не могла видеть кнопку для их запуска, кроме метода, и они не были обнаружены при запуске всех тестов в проекте.
Оказывается, мой тестовый класс не был публичным! Обнародование позволило VS открыть для себя тесты.
источник
Для меня было проще создать новый тестовый проект, который прекрасно работает с Visual Studio 2017 ... и просто скопировать тестовые файлы, добавить ссылки и пакеты NuGet по мере необходимости.
источник
В моем случае это был проект, в котором я обновил тестовый проект с более ранней версии .Net. в app.config у меня были привязки к предыдущим версиям зависимых сборок.
После исправления сборочных привязок в app.config мои тесты были обнаружены.
источник
открытие
Приведенные выше ответы не сработали (перезапуск, обновление до версии 1.1.18 ... Я уже обновился, удаление временных файлов, очистка кеша NuGet и т. Д.).
Я обнаружил, что у меня были разные ссылки на MSTest.TestAdapter и MSTest.Framework в разных тестовых проектах (у моего решения их два). Один был указан в 1.1.18 как ...
packages.config
... но у другого есть ссылки на 1.1.11. Некоторые ответы выше приводят к этому открытию, когда две версии библиотек обнаружились в моем временном каталоге (% TEMP% \ VisualStudioTestExplorerExtensions \) после перезапуска Visual Studio.
Решение
Простое обновление моего packages.config до версии 1.1.18 - вот что восстановило функциональность моих модульных тестов в VS. Похоже, что есть некоторые ошибки, которые не допускают параллельные ссылки на библиотеки MSTest. Надеюсь, это поможет вам.
Больше информации:
источник
Решением было удаление моего
app.config
файла из моего проекта модульного тестирования. Тесты появятся снова!Этот файл ссылается на некоторые библиотеки DLL в связывающих направлениях, которых на самом деле не было в ссылках проекта. Повторно добавьте сборочные привязки, которые строго необходимы для вашего проекта.
источник
В моем случае это был проект UWP, присутствующий в решении проблемы.
Когда я выгрузил проект UWP, тесты были обнаружены. Когда я загрузил его обратно, тест снова исчез.
Попробуйте выгрузить все проекты и сохранить только тестовый проект. Десять восстановительных растворов и тестовых шундов появятся в Test Runner. Загружайте проекты один за другим и перестраивайте решение каждый раз, чтобы выяснить, какой проект вызывает проблему
образец репо
VS сообщение об ошибке
источник
Проблема
Проблема в том, что Visual Studio «запутывается» из-за версий ядра dotnet на компьютере. Когда я зашел в панель управления -> удалить программы, у меня было 8 разных SDK с ядром dotnet и установленные среды выполнения. Это как-то заставляло VS молча иметь ошибку при попытке найти тесты.
Проверить проблему
Вы можете проверить проблему, перейдя в командную строку и получив версию dotnet
$ dotnet --version
. Если вы видите что-либо, кроме последней установленной вами версии, значит, ваше устройство не соответствует и не использует правильную версию. Пример ... Если у вас установлено ядро dotnet,1.0.1
но когда вы получаете версию из командной строки, она говорит1.0.0
это проблема.Решение
Удалить все старые вещи. Я начал только с того, что мне нужно было удалить (самые старые версии dotnet rc), но он все равно дал неправильную версию при тестировании проблемы. В конце концов я согласился сделать полную чистку. Я...
После того, как моя машина была полностью пуста от всех VS и донета, я установил только VS2017 (он поставляется в комплекте с последним dotnet). Я создал тестовый проект xUnit, и тестовый проводник сразу нашел тест решен
Это может показаться излишним, но я потратил две недели, пытаясь исправить это другими способами. Если у вас возникла проблема, просто сделайте это, даже если вам потребуется несколько часов, чтобы удалить / переустановить элементы, это, вероятно, сэкономит ваше время.
Ссылки
источник
Я перепробовал все, но ничего не помогло. В моем случае у меня было решение с несколькими тестовыми проектами, и некоторые из них использовали старую среду ms-test, поэтому Visual Studio нашла только их.
Я установил пакеты инфраструктуры тестирования для всех тестовых проектов, как показано в принятом ответе . Затем удалил ссылки на старые качественные инструменты, перезапустил Visual Studio и теперь я вижу все тесты.
источник
Для C ++:
Поскольку для тестов C ++ особого вопроса нет, но тема почти такая же, вот что мне помогло, когда у меня возникли проблемы с обнаружением тестов.
Если вы только установили разработку для рабочего стола с C ++ , то решением будет также установить разработку универсальной платформы Windows с помощью дополнительных инструментов универсальной платформы Windows C ++ . Вы можете выбрать их в веб-установщике Visual Studio.
После этого пересоберите ваш тестовый проект, и тестовое обнаружение должно работать.
Кстати, я создал проект модульного тестирования в VS2017. Может быть важно, потому что некоторые пользователи упоминали, что у них были проблемы с обнаружением в проектах, которые были перенесены с VS2015 на VS2017.
источник
Удаление старого .dll должно помочь. Очистка временных файлов, расположенных в каталоге% TEMP% в C: \ Users (имя пользователя) \ AppData \ Local \ Temp
источник
Я была такая же проблема. Мое решение было в порядке, но внезапно, когда я открыл решение, я обнаружил, что тесты пропали.
Наконец, я понизил версию
Microsoft.VisualStudio.TestPlatform.TestFramework
иMicrosoft.VisualStudio.TestPlatform.TestFramework.Extensions
установил пакеты до очень старой версии (с помощью диспетчера NuGet), после чего появились методы тестирования. Затем я обновился до последней версии, и все же там были.Так что просто понизьте и обновите пакеты.
источник
В моем случае ничто из перечисленного не поможет мне. Но я понижаю NUNit3TestAdapter до версии 3.8.0, затем обновляю до последней (3.10.0)
источник
Иногда смена пространства имен тестов работает. У меня была структура папок следующим образом:
A |___B | |___D |___C___E
Пространство имен было плоским, как Tests. <Имя>, и они не отображались в окне теста. Когда я изменил пространство имен на структуру каталога, обнаружились все тесты. Теперь я могу вернуться к любой другой структуре пространства имен, которую захочу.
Не забудьте построить свой проект!
источник
В случае .NET Framework в тестовом проекте ранее были ссылки на следующие библиотеки DLL:
Я удалил их и добавил ссылку на:
И тогда все тесты появились и начали работать так же, как и раньше.
Я пробовал почти все другие предложения выше, но просто повторная ссылка на тестовые библиотеки DLL работала нормально. Я разместил этот ответ для тех, кто в моем случае.
источник
Я столкнулся с той же проблемой, в моем случае, чтобы решить
источник
Сначала я попытался использовать MSTest. После этого я изменяю его на тест Nunit. Тогда я хотел поддержать MSTest. Я удалил все коды и ссылки nUnit, но Test Explorer не показывал методы MSTest. Решение: я удалил все ссылки на mstest nuget и переустановил. Готово.
источник
Для меня изменение TargetFramework в
.csproj
файле тестового проекта св
работал.
источник
В моем случае проблема заключалась в том, что тип проекта был установлен на статическую библиотеку (lib), и это должна быть динамическая библиотека (dll)
источник