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

146

У меня есть простое решение в Visual Studio 2013, которое состоит из одного веб-проекта, одного библиотечного проекта и одного проекта модульного тестирования. Когда я открываю решение и пытаюсь запустить модульные тесты, они не обнаруживаются Visual Studio. Чтобы запустить тесты, я пытаюсь зайти в меню и выбрать «Тест» -> «Выполнить» -> «Выполнить все тесты» или открыть окно «Проводник тестов». Тем не менее, Visual Studio не обнаруживает никаких тестов в решении.

Создавая сначала простой проект модульных тестов и пытаясь запустить тест, Visual Studio знает, как открыть тест, и я могу его запустить. Затем, если я открою свое предыдущее решение, то Visual Studio обнаружит все тесты. Я пытаюсь сохранить свое решение, но закрывая его и открывая заново, не создавая сначала проект модульного теста, визуальная студия больше не находит тесты. Это очень странное поведение, я не знаю, почему это происходит.

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

Для создания модульных тестов я использую dll Microsoft.VisualStudio.QualityTools.UnitTestFramework. Моя версия Visual Studio: Microsoft Visual Studio Express 2013 для веб-версии 12.0.30723.00 Обновление 3. Моя версия .net Framework - 4.5.50938.

Все мои тесты такие:

[TestClass] 
public class Service1Test 
{ 
    [TestMethod] 
    public void Test1() 
    {
        Assert.IsTrue(True); 
    } 
}
miguelbgouveia
источник
2
Это асинхронные юнит-тесты?
Джейми Килинг
Не уверен, что проблема была, но запуск в качестве администратора исправил проблему для меня.
Шрирам Шактивель
Все синхронизированные модульные тесты
miguelbgouveia
2
Вы пробовали внешний тестер (например, ReSharpers или NCrunch)? Может быть, ваша установка прослушивается (переустановите VS)
Carsten
1
Ничто из этого не решило проблему для меня :( Какая катастрофа. Я отказался от NUnit и полагаюсь на UnitTestFramework - странно противоположная проблема от OP
Адам

Ответы:

210

Некоторые вещи, которые я заметил, я должен делать время от времени, чтобы тесты отображались правильно.

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

  2. Если ваше решение является 64-битным, убедитесь, что Test> Test Settings> Default Processor Architecture имеет значение x64. Иногда он устанавливается на x86. Установите x64, затем восстановите.

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

  4. Не забудьте на самом деле построить тестовый проект / решение. (Если вы хотите, чтобы он был собран с остальными проектами, щелкните правой кнопкой мыши свое решение> Свойства> Свойства конфигурации> Конфигурация> установите флажок «Построить» для своего тестового проекта)

  5. Убедитесь, что тесты находятся в publicразделе вашего тестового класса

AndyG
источник
34
Я понимаю, что этот ответ немного запоздал, но мой поиск в Google привел меня сюда, и ничто из упомянутого не решило мою проблему. В конце концов я понял, что это был № 2 в моем списке, поэтому я хотел оставить это знание, а также другие уловки, которые я приобрел с течением времени.
AndyG
7
Комбинация № 2 и № 3 сделала это для меня. Visual Studio жаловалась на то, что ряд (не тестовых) проектов в моем решении был исключен из этапа обнаружения тестов, потому что они были созданы для x86, но это было хорошо.
Нейт Барбеттини
4
Я обнаружил, что все мои настройки были правильными и перезапуск не работал. То, что решило проблему для меня, было просто созданием решения. Я знаю, что это может показаться глупым, но это не очевидно, что это необходимо; Я не видел ни одного из официальных документов, упоминающих этот шаг.
user1807768
6
У меня была такая же проблема в VS2015. # 2 исправил проблему для меня.
Mcolegro
2
Я понятия не имею, почему люди платят столько денег за продукт, который часто терпит неудачу. Мне пришлось обновить мой проект до 2015 года и сделать # 3 2 раза, прежде чем он обнаружил мой тест.
Мэтью Хогган
81

Если вы используете NUnit, сначала загрузите адаптер NUnit.

Перейдите в Инструменты → Расширения и обновления… → Онлайн → найдите «NUnit Test Adapter».

Фарух
источник
2
Я использую UnitTests от Microsoft. В этом случае я полагаю, что нет необходимости устанавливать что-либо.
miguelbgouveia
1
Это сделало это для меня - очень обязан.
Матас Вайткявичюс
Это исправило это для меня. Спасибо.
jjthebig1
Утверждено, как и решить проблему, но необходимо ли иметь адаптер NUnit или Visual Stdio должен работать с NUnit "из коробки".
Оуайн
Вы бог сэр.
Nox
61

Убедитесь, что ваш тестовый класс таков, publicчто его можно найти. И если вы ссылаетесь на другой класс, убедитесь в том же.

Кроме того, иногда, если у вас нет утверждений или вы не украшаете тест с помощью [TestMethod], тест может не распознаваться.

Еще 2 вещи: 1) Асинхронные юнит-тесты в лучшем случае выглядят забавно, а в худшем - ни одного. Посмотрите на эту статью по Стивен Клири и сохранить оттуда , если это вас интересует.

2) Если вы используете NUnit и сталкиваетесь с теми же проблемами, имейте в виду, что это [TestCase]для Nunit, а не[TestMethod]

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

Ноктис
источник
1
Все мои тесты выглядят так: [TestClass] public class ServicesUtilsTest {[TestMethod] public void Test1 () {Assert.IsTrue (True); }}
miguelbgouveia
это не очень понятно Поместите это в блок кода в своем вопросе, чтобы его можно было понять :)
Noctis
Все мои тесты предназначены для кода синхронизации, и я думаю, что моя проблема не в коде модульных тестов, а в визуальной студии, иногда не обнаруживающей тесты.
miguelbgouveia
Попробуйте использовать это вместо:using Microsoft.VisualStudio.TestTools.UnitTesting;
Noctis
1
Я уже использую Microsoft.VisualStudio.TestTools.UnitTesting. Это пространство имен определено в dll Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
miguelbgouveia
28

У меня была такая же проблема, но ни одно из других решений не помогло. Оказывается, я использовал фреймворк NUnit 3 с адаптером 2.

Если вы используете NUnit 3, перейдите в раздел Расширения и обновления и установите тестовый адаптер NUnit3.

Фрэнк
источник
Об этом говорится в описании пакета Nuget. Но если вы похожи на меня и не читаете, я надеюсь, что это поможет: «Этот пакет включает сборку фреймворка NUnit 3.0, на которую ссылаются ваши тесты. Вам нужно будет установить версию 3.0 nunit- консольная программа или сторонний бегун, который поддерживает NUnit 3.0 для выполнения тестов. Бегуны, предназначенные для использования с NUnit 2.x, не будут правильно запускать тесты 3.0 ".
Фрэнк
В моем случае я знал, что это как-то связано с обновлением NUnit3, но один набор моего теста пройден, а остальные не были замечены. При ближайшем рассмотрении в выходных данных было много исключений, хотя все тесты пройдены.
Богатый Шилер
Так было и со мной. Я запустил nuget «update-package», не осознавая, что он обновился с NUnit 2.x до 3.x.
Йенс
В настоящее время тестовый адаптер NUnit 3.0 невозможно найти через NuGet (см. Вики NUnit 3.0 ). Это может все еще быть установлено как расширение все же.
vauhochzett
1
Большое спасибо, Фрэнк. Это решило мою проблему. Теперь я могу видеть результаты модульного теста в окне консоли :)
santosh kumar patro
12

У меня эта проблема время от времени. Что мне подходит, так это отключить Visual Studio и перейти в папку:

%LocalAppData%\Microsoft\VisualStudio\12.0\ComponentModelCache

и удалите его содержимое.

После того, как вы откроете Visual Studio и загрузите ваш проект снова, Test Explorer должен содержать ваши тесты

Мариуш Горзох
источник
Для меня это не работает. Я использую Visual Studio 2013 Express с обновлением 5, установленным недавно. По-прежнему никаких юнит-тестов не появляется.
miguelbgouveia
Это было также, что рабочий для меня. Даже работал без перезапуска визуальной студии. Спустя несколько часов, наконец, был конец.
Стефан Райер
Этот каталог больше не существует в VS2017.
Ноэль Видмер
Спасибо, это работает для любого из тех, у кого эта папка может иметь различную версию в зависимости от установки Visual Studio, как для меня это%LocalAppData%\Microsoft\VisualStudio\16.0_03b7a93c\ComponentModelCache
Ravi Kumar Mistry
12

Пользователи XUnit могут заметить, что в окне Test Explorer больше нет списков тестов. Чтобы снова сделать тесты доступными, попробуйте этот важный совет , выделенный ниже.

Если у вас возникают проблемы с обнаружением или выполнением тестов, вы можете стать жертвой поврежденного кэша бегуна в Visual Studio. Чтобы очистить этот кэш, закройте все экземпляры Visual Studio, а затем удалите папку% TEMP% \ VisualStudioTestExplorerExtensions. Также убедитесь, что ваш проект связан только с одной версией пакета NuGet для бегуна Visual Studio (xunit.runner.visualstudio).

Введите TEMP, чтобы найти целевую папку

SushiGuy
источник
Это не сработало для меня. Тестовый проводник просто не находит мой тест и, насколько я могу судить, я не делаю это неправильно, и я попробовал некоторые из решений здесь безуспешно.
Skychan
Использование MsTestV2 - это было единственное, что решило проблему
Натан
5

Для будущих гуглеров у меня был редкий сценарий, который вызвал это.

В моем базовом тестовом классе у меня было свойство с именем TestContext. Это вмешалось в зарезервированное свойство TestContext MSTest, в результате чего все мои тесты были скрыты от VS / Resharper, кроме одного (которое не наследовало от базы).

Адам Берле
источник
1
получил меня тоже! я забыл сделать свойство контекста теста public.
побег-ООО
4

для меня это было изменение «конфигурации решения» на Debug (вместо Release).

zook2005
источник
4

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

alansiqueira27
источник
Из всех вещей .... Это была моя проблема, и немного params имеет смысл. В конце концов, что бы знала тестовая система для прохождения? Решение заключается в создании метода тестирования, в котором вы вручную вызываете метод, который хотите проверить. Если вы тестируете проект WebAPI и у вас есть Get с параметрами, вам все равно нужен соответствующий вызов Get, но он не будет отображаться в проводнике.
MetalPhoenix
4

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

печеньковый монстр
источник
1
Это не отвечает на вопрос выше, но это именно та проблема, которую я пытался решить. Итак, вы попали в аварию +1 :) Большое вам спасибо!
CF
3

Попробуйте построить все проекты как MSIL (любой процессор) вместо x86 / x64. У меня странно получалось

Альфонс
источник
Мне просто нужно было построить тестовый проект с использованием любого процессора, остальные проекты остались на x64
Эдуардо Бритес
1
Технически, C # / VB.NET всегда компилируется в MSIL. Настройка проекта «x86», «x64» или «Любой ЦП» (а в более новых версиях «Предпочитать 32-разрядный») - это просто флаги в верхней части EXE / DLL. Точка все еще стоит, хотя; NUnit не будет перечислять тесты, которые он не может загрузить в механизм исполнения, поскольку они помечены как требующие выполнения определенной архитектуры.
Джонатан Гилберт
3

В то время как решение AndyG работает, более долгосрочным решением может быть установка переменной среды PreferredToolArchitecture равной «x64», либо с помощью:

Как заставить Visual Studio использовать нативный набор инструментов amd64

или по:

  • Панель управления | Система и безопасность | Система | Расширенные настройки системы | Переменные среды
  • PreferredToolArchitecture = x64
  • DefaultToolArchitecture = Native64Bit
  • PROCESSOR_ARCHITECTURE = x64
  • ProcessorArchitecture = x64
Кевин Джонсруд
источник
2

Я столкнулся с той же проблемой, и я снова вспомнил (такая ситуация уже случалась), что выбор «Смешанная платформа» в меню платформы решений работает, как и другие ответы.

Jeferson
источник
Но где меню решений? Это в Visual Studio? Я использую Visual Studio Express 2013 для Интернета и не могу найти это меню.
miguelbgouveia
2

Мне удалось добавить мой как

public static void TestMethod1(){}

начал работать, как только я снял статический ....

Артур Рассел Фокс
источник
2

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

Дебендра Дэш
источник
1

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

user5224229
источник
1
У меня нет опции Configuration Manager в меню моего проекта. Я могу только найти вариант свойств проекта. Я очень платформа проекта юнит-тестов, и это то же самое, что и другие проекты. Так что для меня это решение не работает.
miguelbgouveia
Определить «соответствует остальной части проекта»
объединение
1

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

В .csprojфайле моего тестового проекта для конфиденциальности ссылки NUnit было задано значение False:

<Reference Include="nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
  <HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
  <Private>False</Private>
</Reference>

После того как я приступил <Private>к работе с Trueэтим.

Кевин Гишевски
источник
1

Вам просто нужно установить только этот пакет:

NUnit TestAdapter NUnit TestAdapter

Sandy_Vu
источник
Я знал, что использование другой системы модульного тестирования решит мою проблему. Но если бы я хотел продолжать использовать инфраструктуру модульных тестов Microsoft, это не решение.
miguelbgouveia
1

Чтобы отобразить тесты в окне Test Explorer, мне нужно было установить тестовый адаптер NUnit3 3.0, который не был доступен в диспетчере пакетов.

Скачано с https://visualstudiogallery.msdn.microsoft.com/0da0f6bd-9bb6-4ae3-87a8-537788622f2d

Микал Мэдсен
источник
Я использую UnitTests от Microsoft. В этом случае я полагаю, что нет необходимости устанавливать что-либо.
miguelbgouveia
1

У меня была точно такая же проблема.

Это было связано с несовместимой версией NUnit, которую я добавил в свой проект (3.2.0), и с установленным мной тестовым адаптером (2.0.0).

Чтобы исправить это, используйте «Инструменты> Расширения и обновления» и найдите тестовый адаптер NUnit3, он обнаружил мои тесты после этого.

ура

Фрэнсис Смит
источник
Я не использую NUnit.
miguelbgouveia
1

Давайте просто скажем, что вам нужно использовать архитектуру X64 в вашем тестовом проекте, чтобы правильно построить зависимости (как в моем случае). Вам может потребоваться изменить архитектуру процессора по умолчанию в меню « Тест - Настройки теста» . Установка этого параметра в X64 позволила моему тест-проводнику находить мои тесты, используя Microsoft.VisualStudio.TestTools.UnitTesting.

Доминик Хартьес
источник
1

Извините за добавление в длинный список, но у меня была совершенно другая проблема. Во-первых, я хотел бы упомянуть, что обнаружил свою проблему, щелкнув «Выполнить все» в Test Explorer, а затем просмотрев окно вывода сборки в Visual Studio. Вы должны активно смотреть его, так как после этого сообщение исчезает.

Что касается проблемы, похоже, что во время сканирования тестов библиотека DLL загружается и перечисляются ее типы тестов. Это приводит к загрузке ссылок, и если в ходе этого процесса произойдет сбой, тесты не будут отображаться в проводнике. У меня было две проблемы, препятствующие успешной загрузке тестовой DLL:

  • В конфигурационном файле все еще оставалось перенаправление привязки (перенаправление на версию ниже NHiberate, чем та, на которую ссылались в тестовом проекте).
  • Конфликтующая ссылка на сборку (ссылки 2-го уровня не могут быть загружены). AsmSpy , кстати, отличный инструмент для охоты на них.
Мартейн Эвенс
источник
Я столкнулся с той же проблемой, мне было трудно найти, какие библиотеки не загружались ....
Амарнат Чаттерджи
1

Если вы загрузите решение Visual Studio (в моем случае сообщество VS 2015) из общего сетевого ресурса или из каталога «Мои документы», который является частью общего ресурса , вы попадете в эту проблему. Я решил это, переместив решение и лежащие в его основе проекты в локальную папку.

Тон Сноей
источник
1

Проведя 2 дня ... ничего из вышеперечисленного не помогло мне. Единственным «решением» было: Перейти в свойства проекта -> Build Tab. Затем нажмите кнопку «Дополнительно» в правом нижнем углу панели. Измените «Debug Info:» на «full» и нажмите «ОК».

Вот скриншоты: введите описание изображения здесь

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

curiousBoy
источник
0

Я столкнулся с той же проблемой. И исследовал и обнаружил, что dll не были собраны, а помещены в нужную папку. как только я изменил свою конфигурацию, они появились. - Варианты сборки проектов, какую папку использовать? - пункт меню сборки конфигурации сборки, они должны быть проверены.

это исправило это для меня.

к.ф.н.
источник
Для меня dll для тестов также не были построены, потому что Visual Studio не находит никаких определенных тестов. Я использую Visual Studio Express, и у меня нет пункта меню Build. Но в моем диспетчере конфигурации я проверил все параметры сборки. Итак, я думаю, что это не проблема для моего случая.
miguelbgouveia
@miguelbgouveia, все наоборот - VS создает библиотеки DLL, а затем сканирует их на наличие тестов. Поэтому, если у вас нет DLL-файлов тестового проекта, вы определенно не найдете тестов.
0

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

MartijnK
источник
1
Это в решении вашего проекта. Щелкните правой кнопкой мыши файл проекта в обозревателе решений -> Открыть папку в проводнике. Перейдите оттуда на один каталог и удалите каталог / TestResults. Возможно, вам придется закрыть Visual Studio, чтобы удалить все. Он перестроит каталог при следующем открытии проекта.
MartijnK
0

Убедитесь, что все ваши проекты работают с одинаковой конфигурацией. Под Свойства вашего проекта => Debug => Платформа в раскрывающемся списке выберите соответствующую платформу (для меня это был «Любой процессор»), как определено в других ваших проектах.

Roni
источник
0
  • Я знаю, что модульные тесты не найдены, если решение не создано, так что это что-то, что можно попробовать (Построить решение), но это решение похоже на то, как служба поддержки спрашивает, подключен ли ваш компьютер ...
  • После того, как чистая перестройка не помогла мне решить проблему, запуск полной пакетной сборки все-таки решил.
сливаться
источник
0

Была такая же проблема; тесты внезапно перестали обнаруживаться.

Nunit Test Adapter как-то отключился. Нажатие включения в диспетчере расширений исправило это для меня.

HeatherD
источник
0

У меня была такая же проблема, пока я не понял, что сделал ошибку вырезать / вставить и остановился [Test Method]перед тестом.

forforf
источник
Это уже случилось со мной. Но в этом их дело не в этом.
miguelbgouveia