Почему visual studio 2012 не находит мои тесты?


221

У меня есть некоторые тесты, которые используют встроенные Microsoft.VisualStudio.TestTools.UnitTesting, но не могут заставить их работать.

Я использую Visual Studio 2012 Ultimate.

У меня есть решение двух проектов; Надо испытание, using Microsoft.VisualStudio.TestTools.UnitTesting, [TestClass]перед классом, [TestMethod]прежде чем методы испытаний и ссылки Microsoft.VisualStudio.QualityTools.UnitTestFramework(версия 10.0.0.0, во время выполнения версии V2.0.50727). Я пробовал dot-net framework 3.5, 4 и 4.5, другие дают ошибку перенаправления.

Я попытался построить решение и проект. Тестовый проводник имеет сообщение «Создайте свое решение, чтобы обнаружить все доступные тесты. Нажмите «Выполнить все», чтобы создать, обнаружить и запустить все тесты в вашем решении.

Итак, вопрос в том, как заставить визуальную студию найти тесты?


Также пытался следовать этому: http://msdn.microsoft.com/en-US/library/ms379625%28v=VS.80%29.aspx, но безуспешно: я застреваю в разделе начало работы, когда меня просят щелкните правой кнопкой мыши и выберите create tests. Здесь нетcreate tests .


У меня есть этот тест (он компилируется, но не отображается в тестовом проводнике):

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace tests {
    [TestClass]
    public class SimpleTest {
        [TestMethod]
        public void Test() {
            Assert.AreEqual("a","a", "same");
        }
    }
}

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


Какая версия VS 2012? Вы можете скачать тестовый прогон, например TestDriven.Net, или в Resharper.
Бретт Оллред

Я использую Visual Studio 2012 Ultimate.
Ctrl-Alt-Delor

Пожалуйста, поделитесь версией фреймворка и версией библиотеки UnitTesting, которую вы добавили в качестве ссылки
Adil

5
В моем случае удаление файла app.config исправило проводник модульного теста
Крис Ричнер,

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

Ответы:


227

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

Мне пришлось добавить еще один шаг к решению Питера Ламберга - очистить ваше решение / проект.

Мой unittest проект нацелен на x64. Когда я создавал проект, он изначально был нацелен на x86.

После перехода на x64 все мои юнит-тесты исчезли.

Мне пришлось перейти в меню «Тест» -> «Настройка теста» - «Архитектура процессора по умолчанию» -> x64.

Они все еще не появились.

Сделал сборку.

Все еще не появился.

Наконец-то сделал чистку

Затем они появились.

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


Хотя чистка иногда помогает, это не проблема. У меня проблема с проектами на сетевых дисках. И тот факт, что сборка помогает всегда, является лишь признаком неисправного инструмента сборки.
Ctrl-Alt-Delor

7
Вот Это Да! «Чистое решение» действительно работает (в отличие от просто перестроить все). Я думал, что это перестало быть полезным взломом в Visual Studio 6.0!
Дэйв

«Чистый» не работал для моего коллеги, у которого была эта проблема. Это сработало для нее после удаления всего исходного кода из ее рабочего пространства TFS и получения последней версии (с перезаписью). Тогда это работало отлично!
Майкл Р,

2
Это было для меня. В решении со смесью x86, любого процессора, x64 тесты одного конкретного проекта не были найдены. Я очистил решение, изменил архитектуру настроек теста по умолчанию и перестроил, и тогда все было видно. Это действительно не имеет смысла, так как при изменении архитектуры обнаружены тесты, скомпилированные под другую архитектуру процессора.
Бен Х

2
Право, когда я сменил процессор по умолчанию - все мои тесты показали. Большое спасибо за это!
Дэн Бут

160

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

namespace tests {
    [TestClass]
    public class SimpleTest {
        [TestMethod]
        public void Test() {
            Assert.AreEqual("a","a", "same");
        }
    }
}

24
Сделал это для меня, почти стыдно, я не узнал сам :)
Landi

5
У меня также была эта проблема, моя была вызвана [TestMethod]статичностью из-за копирования-вставки другого кода.
Сеф

2
@Seph: Мой [TestMethod]где статичен, потому что это то, что было UserTest1.csв новом тестовом проекте! И решил мою проблему.
Андре Луус

4
Также не ставьте staticперед вашим методом. Я не знаю, почему я делаю это по привычке так часто.
Левининя

1
Это сделало это для меня, интересно, как вы можете потерять так много времени на то, что должно было быть настолько очевидным. Спасибо за ответ Джо Кинг
Тулани Чивандиква

58

Это иногда работает.

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

Тест -> Настройки теста -> Архитектура процессора по умолчанию -> x86 / x64

Как упоминалось в других статьях, убедитесь, что у вас открыто окно Test Explorer. Тест -> Windows -> Тестовый проводник

Затем повторная сборка проекта с тестами должна отобразить тесты в Test Explorer.

Редактировать: Как указал Урджами ниже, чистая сборка также может помочь. В дополнение к этому, вот еще одна вещь, с которой я столкнулся:

Флажок «Сборка» был снят в Configuration Manager для нового тестового проекта, который я создал в рамках решения.

Зайдите в Build -> Configuration Manager. Убедитесь, что в вашем тестовом проекте установлен флажок сборки для всех конфигураций решения и платформ решения.


Да, это могут быть другие причины, по которым это не сработает, но посмотрите ответ ниже, чтобы узнать, почему это не сработало для меня. (общие папки по умолчанию отключены), если вы можете сказать нам, как это изменить, я дам вам несколько баллов.
Ctrl-Alt-Delor

Нет такого процессора, как x64, но я думаю, что Microsoft использует этот термин для x86-64 / amd64 / x86e. Также нет x86, только семейство x86. Символ x означает неизвестное, поэтому членами семейства x64 будут 164, 264, 364 ... ИЛИ это был 86-разрядный процессор x86.
Ctrl-Alt-Delor

спасибо за ваш ответ, он мне помогает (я перешел с сборок x86 на сборки x64)
enguerran

Даже в VS 2015 с открытым окном Test Explorer работало. Рад, что я также могу запускать тесты из командной строки.
Брайан

32

У меня Visual Studio 2012, и я не мог видеть тесты в Test Explorer,

Поэтому я установил следующее: Тестовый адаптер NUnit

Это решило проблему для меня!


1
Также доступно через NuGetInstall-Package NUnitTestAdapter
Даррен Хейл

Спасибо @DarrenHale. При поиске этого пакета в NuGet я также нашел пакет под названием NUnit TestAdapter, включающий в себя NUnit 2.6.4 Framework .
Рэй

18

По моему недавнему опыту все вышеперечисленное не сработало. Мой метод испытаний

public async void ListCaseReplace() { ... }

не показывался, но компилировался нормально. Когда я удалил asyncключевое слово test, оно появилось в Test Explorer. Это потому, async voidчто это метод «забей и забудь». Сделайте метод, async Taskи вы получите свой тест обратно!

Кроме того, отсутствие конфигурации проекта Test на «Build» также препятствует отображению тестов. Configuration Manager> Проверьте свой тест для сборки.


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

12

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

Чтобы позволить VS.NET загружать вещи из общего сетевого ресурса, необходимо добавить их (общие ресурсы) в надежные расположения. Чтобы добавить местоположение в полный список доверия (очевидно, измените его в соответствии с требованиями вашей среды):

 caspol -m -ag 1.2 -url file:///H:/* FullTrust

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

 caspol -lg

Этот вопрос не проверяется спрашивающим, так как я больше не заинтересован в ответе. Если это работает для вас (или нет), то добавьте комментарий ниже.
Ctrl-Alt-Delor

6
@ Richard Итак, вы принимаете ответ, который вы не проверяли, и отрицаете другие ответы, которые описывают решения для различных причин вашей проблемы? ....Это странно!
Стефан Бауэр

1
Это оказалось проблемой для меня, но не решением. Я переместил все локально и все тесты были найдены! Спасибо!
Трэвис Свиентек,

1
CasPol.exeможно найти под %windir%\Microsoft.NET\Framework[64]\[version]. Убедитесь, что вы устанавливаете политику для правильной архитектуры. Источник: msdn.microsoft.com/en-us/library/cb6t8dtz%28v=vs.100%29.aspx
EpicVoyage

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

10

Проблема, которую я обнаружил, заключается в том, что тесты не обнаруживаются в Test Explorer (ничего не отображается), если решение работает с сетевого диска / сетевого расположения / общего диска

Вы можете исправить это, добавив переменную окружения.

COMPLUS_LoadFromRemoteSources и установить его значение в 1


6

У меня была такая же проблема .. В моем случае это было вызвано частной собственностью TestContext .

Помогло его изменение на следующее:

public TestContext TestContext
{
    get;
    set;
}

После очистки и построения решения (как описано в ответе @Ourjamie) методы тестирования в затронутом классе тестирования стали доступны в Test Explorer.


ОК, те же симптомы, так что уберём отрицательное голосование, если пояснишь, что ты изменил (с чего).
Ctrl-Alt-Delor

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

1
Это было причиной моей проблемы. У меня было поле для интерфейса зависимостей в качестве частного поля. Вы спасатель жизни!
Alex

6

Я столкнулся с той же проблемой, пытаясь открыть решение для общего сетевого ресурса. В этом случае Test Explorer не обнаружит модульный тест. Решение оказывается:

Панель управления -> Свойства обозревателя -> Вкладка «Безопасность» -> Нажмите «Интранет» и добавьте IP-адрес сервера или имя хоста, на котором находится сетевой ресурс, в список «Сайты».

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


6

Список быстрых проверок для решения некоторых распространенных проблем тестирования. Удостоверься что:

  1. Тестовый класс и методы испытаний public
  2. Тестовый класс имеет [TestClass]атрибут
  3. Методы испытаний имеют [TestMethod]атрибут

Если это не помогает, попробуйте очистить, пересобрать решение и перезапустить Visual Studio.


Это решит проблемы большинства посетителей этого вопроса и суммирует большинство ответов, однако не охватывает проблему в вопросе.
Ctrl-Alt-Delor

1
Спасибо. UTA001: TestClass attribute defined on non-public class
Ярек Пшигодзки

6

Я получаю ошибку: "Failed to initialize client proxy: could not connect to vstest.discoveryengine.exe."

Попробуйте запустить Visual Studio от имени администратора. Это сработало для меня.

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


3
У меня тоже сработало! Я думаю, что это отдельная проблема.
Джастин Морган

2
Эй, это работает человек. Большое спасибо .. Любой обходной путь, чтобы это работало без запуска от имени администратора?
Шрирам Шактивель

2
Извините, я не думаю, что запуск от имени администратора - это хорошее решение. Если не доказательство того, что это единственный путь.
Ctrl-Alt-Delor

Запуск от имени администратора, как правило, не является большой проблемой. Но одна из проблем заключается в том, что вы не можете отправить Workitem в Outlook.
Эдвард Оламисан

Отредактировал ваш ответ для ссылки на соответствующий пост SO, надеюсь, вы не возражаете. Я согласен со Шрирамом и Ричардом. Хотя это работает, это обходной путь, а не решение. Почему это вообще работает, кажется неясным.
Стивен Джеурис

4

У меня иногда появляются одни и те же симптомы.

Что я сделал:
1. Закрыл окно Test Explorer.
2. Очистил решение.
3. Перестроил решение.
4. Перезапустил окно Test Explorer из меню Test -> Windows -> Test Explorer.

И я получил свой тест в окне Test Explorer.


Я не думаю, что это та же проблема.
Ctrl-Alt-Delor

3
Я думаю , что это IS та же проблема, это просто вызвано чем - то другим.
Стефан Бауэр

2

Из строки меню сверху ...

Тест -> Выполнить -> Все тесты

Вы также можете просмотреть все тесты из Test Explorer (Test -> Windows -> Test Explorer)

Далее с VS 2012, если вы что-то упустили, попробуйте поискать его с помощью панели быстрого запуска в правом верхнем углу (Ctrl + Q) «Тест»

Надеюсь это поможет.


Я попробовал это, оба работают с nunit. Но на этот раз я пытаюсь запустить чужие тесты, написанные с использованием Microsoft.VisualStudio.TestTools.UnitTesting, есть идеи, что еще я делаю не так?
ctrl-alt-delor

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

2
Я просто хотел убедиться, что вы используете экспресс-версию или версию, в которой нет инструментов тестирования. Вы пытались установить сторонний тестовый бегун?
Бретт Оллред

2

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


в моем случае app.config также убил появление модульного теста. После удаления app.config и восстановления тестового проекта они наконец вернулись!
Крис Ричнер

2

В моем случае это было что-то еще. Я установил пакет, а затем удалил его и переустановил более раннюю версию. Это оставило остаточное configuration/runtime/asssemblyBinding/dependencyIdentityперенаправление в моем app.config. Я должен был исправить это. Я понял это, посмотрев в Outputокно и выбрав " Tests" в раскрывающемся списке. Сообщение об ошибке было там. Это была боль ... Надеюсь, это поможет кому-то еще.


2

Это больше для того, чтобы помочь людям, которые оказались здесь, а не ответить на вопрос ОП:

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

Надеюсь, это кому-нибудь поможет.


2

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


2

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

Я использую NUnit и Specflow, а также. По умолчанию Мой тестовый проект нацелен на X86, но я должен изменить это на X64. Шаги: 1. Тестовое меню -> Настройка теста - Архитектура процессора по умолчанию -> x64. 2. Чистая сборка 3. Сборка 4. Если тесты еще не появились. 5. Перейдите в Инструменты  Расширения и обновления, затем установите библиотеки NUnit и Specflow 6. Чистая сборка 7. Сборка

Затем обычно тест отображается в редакторе тестов.


@srebella Хорошо, что вы решили эту проблему. Я потратил несколько дней, чтобы решить это. Просьба поделиться своим опытом с сообществом. Пожалуйста, поставьте этот ответ наверх, если считаете, что он работает. Спасибо :-)
Ширан Джаявардена

1

Я обновил VS 2012 до последнего обновления. то есть визуальное обновление студии 3. Это решило проблему для меня.


1

Для меня решение было чуть менее сложным.

Я только что перенес на свою машину существующее решение (клонировано из gitHub), и мы не отслеживаем автоматически сгенерированные файлы .cs, созданные Visual Studio. (Для каждого файла объектов есть файл .cs с тем же именем)

Открытие решения без наличия связанных с ним файлов .cs фактически позволяет мне переходить к связанным методам, поэтому все выглядело так, как будто specflow был подключен правильно, но я не смог просмотреть названия тестов в Test Explorer.

Для этой проблемы простое исключение файлов объектов из проекта и последующее их повторное включение заставило VS сгенерировать эти автоматически созданные файлы кода.

После этого я смог просмотреть тесты в тестовом проводнике.


1

У меня была эта проблема при обновлении моего решения с Microsoft Visual Studio 2012 Express для Web до Microsoft Visual Studio 2013.

Я создал проект модульных тестов в 2012 году, и после открытия в 2013 году проект модульных тестов не отображал никаких тестов в проводнике тестов. Каждый раз, когда я пытался запустить или отладить тесты, это не удавалось, говоря следующее в окне вывода:

    Failed to initialize client proxy: 
    could not connect to vstest.discoveryengine.x86.exe

Я также заметил, что при отладке тестов он запускал экземпляр Visual Studio 2012. Это подсказало мне тот факт, что проект модульных тестов все еще ссылался на 2012 год. Глядя на ссылку на тестовый проект, я понял, что он был нацелен на неправильный Microsoft Visual DLL-библиотека Framework Studio Test для этой версии Visual Studio:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll

Я изменил номер версии с 11.0 на 12.0:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll

Я перестроил все, и это устранило проблему - все тесты были найдены в Test Explorer, и теперь все тесты найдены и работают отлично.


1

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


или просто пропустите проверку подписи на своем локальном компьютере с sn -Vr *,<public key token>правами администратора в командной строке разработчика VS
Silas,

1

Я столкнулся с той же проблемой, пытаясь открыть решение для общего сетевого ресурса в VS2013 Ultimate.

Я исправил проблему включив

Панель управления -> Свойства обозревателя -> Вкладка «Безопасность» -> Нажмите «Локальная интрасеть», нажмите на сайты и убедитесь, что установлен флажок «Автоматически определять сеть интрасети».


1

Все это отличные ответы, но есть еще одна причина, о которой я знаю; Я просто столкнулся с этим. В одном из моих тестов у меня было сообщение ReSharper, указывающее, что у меня был неиспользуемый закрытый класс. Это был класс, который я собираюсь использовать в предстоящем тесте. Это фактически заставило все мои тесты исчезнуть.


1

Проверьте связанные сборки на наличие любых сборок, для которых «Локальное копирование» может иметь значение «Ложь».

Если ваш тестовый проект собирается в свою собственную папку (например, bin / Debug), и проект зависит от другой сборки, и одна из этих сборок в списке «Ссылки» помечена как «Копировать локально =« Ложь », сборка не может быть загружена из-за отсутствующих зависимостей и ваши тесты не будут загружаться после сборки.


1

Похоже, что NUnit Framework 2.6.4 плохо работает с тестовым адаптером NUnit. На сайте упоминается, что тестовый адаптер будет работать только с NUnit Framework 2.6.3.

Это была моя проблема: 1. Я скачал NUnit и NUnit Test Adapter отдельно через Nuget в VS2012. Каким-то образом NUnit обновился до версии 2.6.4. Внезапно я не увидел список тестов.

Fix:

  1. Удалить Nuget и адаптер Nuget Test

    а. Перейдите в Инструменты> Nuget> Диспетчер Nuget Pkg> Управление Nuget Pkg для решения

    б. Список установленных пакетов

    с. Нажмите Управление

    д. Не проверяйте свои проекты

  2. Установите тестовый адаптер NUnit, включая NUnit 2.6.3 Framework

  3. Очистить / восстановить решение

  4. Откройте Test> Test Explorer> Run All

Я вижу все тесты

Надеюсь это поможет


1

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


1

У меня была та же проблема, но немного другая.

Я использовал Visual Studio 2012. По какой-то причине выполнялись только тесты исходного сгенерированного файла. Но тесты в другом файле не были запущены. Пробовал разные решения, выложенные здесь, не сработало.

Наконец, я понял, что у меня есть закрытый метод в тестовом классе, который был первым методом внутри класса. Я только что переместил приватный метод после тестового метода; так что теперь метод с [TestMethod]атрибутом является первым методом внутри класса. Странно, но сейчас это работает.

Надеюсь, это поможет кому-нибудь когда-нибудь.


1

Тесты не любят асинхронные методы. Например:

    [TestMethod]
    public async void TestMethod1()
    {
        TestLib oLib = new TestLib();
        var bTest = await oLib.Authenticate();

    }

После этого:

    [TestMethod]
    public void TestAuth()
    {
        TestMethod1();
    }

    public async void TestMethod1()
    {
        TestLib oLib = new TestLib();
        var bTest = await oLib.Authenticate();

    }

Это видел тест.


Лучший ответ[Test] public void XamarinExampleTest() { // This workaround is necessary on Xamarin, // which doesn't support async unit test methods. Task.Run(async () => { // Actual test code here. }).GetAwaiter().GetResult(); }
Роберт Грин MBA

3
«Тесты не любят асинхронные методы» - ложь . «Тесты не любят асинхронные пустые методы» - это правда , и решение состоит в том, чтобы просто объявить тестовый метод как асинхронную задачу .
Массимилиано Краус

1

Добавление моего ответа, так как это лучший результат в Google для этого.

Я использую Visual Studio 2015 и (по незнанию - я только что побежал Install-Package NUnit ) установил NUnit3 пакет NuGet в свой тестовый проект. У меня уже было установлено расширение NUnit Test Adapter, и мои тесты все еще не появлялись.

Установка тестового адаптера NUnit3 через Инструменты> Расширения и обновления исправила это для меня.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.