Чому візуальна студія 2012 не знайде мої тести?


221

У мене є кілька тестів, які використовують вбудований Microsoft.VisualStudio.TestTools.UnitTesting, але не можуть змусити їх працювати.

Я використовую візуальну студію 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.
Бретт Алредред

Я використовую візуальну студію 2012 ultimate.
ctrl-alt-delor

Будь ласка, поділіться рамковою версією та версією бібліотеки UnitTesting, яку ви додали як довідку
Аділ

5
У моєму випадку вилучення файлу app.config виправило дослідник тестового модуля
Кріс Річнер

4
Спробуйте шукати помилки в категорії "Тест" у вікні виводу. Я створюю функціональні тести з версії версії, і коли я намагаюся налагоджувати за допомогою програми налагодження (чиї знаходження розташовані в іншій структурі папок), я не отримую жодних помилок збирання, але мені потрібно шукати тести зі спадного меню. Як тільки я їх
вирішу

Відповіді:


227

У мене були такі ж симптоми, але за різних обставин.

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

Мій проект "unittest" орієнтований на x64. Коли я створив проект, він спочатку орієнтувався на x86.

Після переходу на x64 всі мої одиничні тести зникли.

Мені довелося перейти до меню тестування -> тестова настройка -призначення архітектури процесора -> x64.

Вони все ще не з’являлися.

Зробив збірку.

Ще не з’являвся.

Нарешті чистили

Потім вони з’явились.

Я вважаю, що Clean Solution і Clean є дуже корисними при отриманні рішень для гри в м'яч, коли налаштування змінилися. Іноді мені доводиться йти на крайнощі і видаляти objта binкаталоги і пересобрать.


Хоча чистка іноді допомагає, це не проблема. У мене проблема з проектами на мережевих накопичувачах. А те, що побудова допомагає колись, - лише симптом помилкового інструменту збирання.
ctrl-alt-delor

7
Оце Так! "Чистий розчин" справді, здається, працює (на відміну від простої відновлення всіх). Я подумав, що це перестало бути корисним хаком назад у Visual Studio 6.0!
Дейв

"Чистий" не працював для мого колеги, у якого виникло це питання. Це працювало для неї після видалення всього вихідного коду з робочої області TFS та отримання останнього (з / перезапис). Тоді це спрацювало чудово!
Michael R

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]був статичним через копію-пасту іншого коду.
вересня 1313

2
@ Sef: Мій [TestMethod], де статичний, тому що це було UserTest1.csв новому тестовому проекті! Також вирішив мою проблему.
Андре Луус

4
Також не ставте staticперед своїм методом. Я не знаю, чому так часто роблю це за звичкою.
levininja

1
Це зробив це для мене, цікаво, як ти можеш втратити стільки часу на те, що мало бути таким очевидним. Дякую за відповідь Джо Кінг
Тулані Чівандіква

58

Це іноді спрацьовує.

Переконайтеся, що архітектура процесора в меню Тест відповідає тій, яку ви використовуєте для створення рішення.

Тест -> Налаштування тесту -> Архітектура процесора за замовчуванням -> x86 / x64

Як згадувалося в інших публікаціях, переконайтесь, що у вас відкрито вікно Test Explorer. Тест -> Windows -> Тест Провідник

Після відновлення проекту з тестами тести повинні з’являтися в Test Explorer.

Редагувати: Як вказав Ourjamie нижче, чисте складання також може допомогти. Окрім цього, ось ще одна річ, з якою я стикався:

У новому тестовому проекті, який я створив під рішенням, у "Менеджері конфігурацій" знімали прапорець "Збірка".

Перейдіть до Build -> Менеджер конфігурацій. Переконайтеся, що у вашому тестовому проекті встановлено прапорці для всіх конфігурацій рішення та платформ рішення.


Так, це можуть бути й інші причини, що це не спрацює, але дивіться галочку нижче, чому це не спрацювало для мене. (спільні папки вимкнено за замовчуванням), якщо ви можете сказати нам, як це змінити, я дам вам кілька балів.
ctrl-alt-delor

Немає такого процесора, як x64, але я вважаю, що мікрософт використовує цей термін для x86-64 / amd64 / x86e. Немає також x86, просто сім'я x86. X означає невідоме, тому члени сімейства x64 будуть 164, 264, 364 ... АБО x86 був 86-бітовим процесором.
ctrl-alt-delor

дякую за вашу відповідь, мені це допомагає (я перейшов з версії x86 на x64 будує)
enguerran

Навіть у VS 2015 працював із відкритим вікном Test Explorer. Радий, що я також можу запускати тести з командного рядка.
Брайан

32

У мене є Visual Studio 2012, і я не міг побачити тести в Test Explorer,

Тому я встановив наступне: Тестовий адаптер NUnit

Це вирішило для мене проблему!


1
Також доступний через NuGetInstall-Package NUnitTestAdapter
Darren Hale

Дякую @DarrenHale Під час пошуку цього пакету в NuGet я також знайшов пакет під назвою NUnit TestAdapter, включаючи NUnit 2.6.4 Framework .
промінь

18

За моїм останнім досвідом все вищесказане не спрацювало. Мій метод тестування

public async void ListCaseReplace() { ... }

не показувався, але склав штрафи. Коли я видалив asyncключове слово, тест з'явився в Test Explorer. Це тому, що async voidце метод "пожежі та забуття". Складіть метод, async Taskі ви отримаєте тест назад!

Крім того, відсутність конфігурації тестового проекту на "Збірка" також запобіжить появі тестів. Менеджер конфігурацій> Перевірте свій тест для складання.


2
Мені знадобилося багато часу, щоб зрозуміти це. Я відновив кілька методів асинхронізації і просто додав ключове слово до тестів. Лише коли я зашифрував новий тест на цьому блоці, я помітив, що інші тести також відсутні. Я знайшов цю відповідь, яка пояснює, чому це відбувається.
julealgon

12

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

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

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

Щоб перевірити або перелічити наявні довірені місця, виконайте такі дії:

 caspol -lg

Ця відповідь не підтверджена запитувачем, оскільки я більше не маю інтересу до відповіді. Якщо це працює для вас (чи ні), додайте коментар нижче.
ctrl-alt-delor

6
@richard Отже, ви приймаєте відповідь, яку ви не підтвердили та не підтвердили інші відповіді, що описують рішення для різних причин вашої проблеми? ....Це дивно!
Стефан Бауер

1
Це виявилося для мене проблемою, але не рішенням. Я перемістив все місцеве і всі тести були знайдені! Дякую!
Travis Swientek

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

Проблема, яку я знайшов, полягає в тому, що тести не знаходять у Тестовому Провіднику (нічого не з’являється), якщо рішення працює з мережевого диска / мережевого розташування / спільного диска

Ви можете виправити це, додавши змінну середовища.

COMPLUS_LoadFromRemoteSources та встановіть його значення на 1


6

У мене була така ж проблема .. У моєму випадку це було викликано приватною власністю TestContext .

Змінивши його на таке, допомогло:

public TestContext TestContext
{
    get;
    set;
}

Після очищення та складання розчину (як описано у відповіді @Ourjamie) методи тестування у постраждалому тестовому класі були доступні у Тестовому Провіднику.


ОК ті самі симптоми, тому знімемо голосування, якщо ти зрозумієш, що ти змінив (з чого).
ctrl-alt-delor

1
У мене було точно так само, я стежив за цілою ниткою, потім прийшов до цієї і привів мене до ідеї, щоб викласти її на публіку, бінго: з'явилися мої нові тести. Я розумію попередні коментарі, але ... оскільки цей приносить нам інформацію від Google ... це нитка для читання, коли тести не з’являються.
edelwater

1
Це було причиною моєї проблеми. У мене було поле для інтерфейсу залежності як приватне поле. Ви рятувальник життя!
Олексій

6

Я зіткнувся з тим же питанням, намагаючись відкрити рішення на загальній мережі. Тестовий провідник не виявив би тест одиниці в цьому випадку. Рішення виявляється таким:

Панель управління -> Параметри Інтернету -> Вкладка "Безпека" -> Клацніть "Інтранет" і додайте до списку "Сайти" IP-адресу сервера або ім'я хоста, що містить мережеву папку.

Після цього я перекомпілював рішення і тепер з’явилися тести. Це має бути досить подібним до відповіді, яку отримав @BigT.


6

Швидкий контрольний список для вирішення деяких загальних тестових проблем. Переконайтесь, що:

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

Якщо це не допомагає, спробуйте очистити, відновити рішення та перезапустити Visual Studio.


Це дозволить вирішити проблеми більшості відвідувачів цього питання та узагальнити більшість відповідей, однак це не висвітлює проблему у питанні.
ctrl-alt-delor

1
Дякую. UTA001: TestClass attribute defined on non-public class
Jarek Przygódzki

6

Я отримував помилку: "Failed to initialize client proxy: could not connect to vstest.discoveryengine.exe."

Спробуйте запустити Visual Studio як адміністратор. Це працювало для мене.

Існує ще один пост переповнення стека, який обговорює цю помилку , і те саме рішення працює для них. Залишається питанням, чому це працює.


3
Працював і для мене! Я думаю, це окреме питання.
Джастін Морган

2
Гей, це працює людина. Дуже дякую .. Будь-яке вирішення, щоб воно працювало без запуску адміністратора?
Шрірам Сактівель

2
Вибачте, я не думаю, що запуск адміністратора - це гарне рішення. Якщо не підтвердити, що це єдиний спосіб.
ctrl-alt-delor

Запуск адміністратора зазвичай не є великою проблемою. Але одне з питань полягає в тому, що ви не можете надсилати Workitem до Outlook.
Едвард Оламісан

Відредагував свою відповідь, щоб посилатись на пов’язану публікацію ТА, сподіваюся, що ви не заперечуєте. Я згоден із Шрірамом та Річардом. Хоча це працює, це рішення, а не рішення. Чому це взагалі працює, видається незрозумілим.
Стівен Євріс

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) "Тест"

Сподіваюсь, це допомагає.


Я спробував це, обидва працюють з нунітом. Але цього разу я намагаюся запустити чужі тести, написані з використанням Microsoft.VisualStudio.TestTools.UnitTestingбудь-якої ідеї, що я ще роблю неправильно?
ctrl-alt-delor

Це не має ніякої різниці ... Часом трапляється не виявити блок-тест ... тож якщо у відкритому тестовому досліднику і побудувати рішення, воно через деякий час приведе одиничний тест ... Можливо, ти вже це знаєш. ..
Аділь

2
Я просто хотів переконатися, що ви використовуєте експрес-версію або версію, яка не включає тестові інструменти. Ви спробували встановити сторонній тестовий бігун?
Бретт Алредред

2

Я знайшов найкращий спосіб вирішити цю проблему - створити файл .proj msbuild і додати свої тестові проекти одиниці, у яких у вас є проблема, у цей файл та виконати тести, використовуючи версію mstest командного рядка. Я знайшов невелику проблему з конфігурацією у своїй програмі app.config, яка з’явилася лише під час запуску тестів з mstest - інакше тестовий проект склався просто чудово. Також ви знайдете будь-які непрямі довідкові проблеми і з цим методом. Після того, як ви зможете запустити тест Unit з командного рядка за допомогою 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 був підключений належним чином, але я не зміг переглянути імена тестів у Провіднику тестів.

Для цієї проблеми просто виключення файлів функцій з проекту та повторне включення їх змусило VS відновити ці автоматично створені кодові файли.

Після цього мені вдалося переглянути тести в тестовому досліднику.


1

У мене була ця проблема під час оновлення мого рішення з Microsoft Visual Studio 2012 Express для Web до Microsoft Visual Studio 2013.

Я створив проект Unit Tests у 2012 році, і після відкриття в 2013 році проект Unit Test не показав би тестів у програмі тестів. Кожен раз, коли я намагався запустити або налагодити тести, це не вдалося, сказавши наступне у вікні виводу:

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

Я також помітив, що під час налагодження тестів він запускав екземпляр Visual Studio 2012. Це втягнуло мене в той факт, що проект Unit Tests все ще посилався на 2012 рік. Переглядаючи посилання тестового проекту, я зрозумів, що він орієнтований на неправильну Microsoft Visual Тестова рамка DLL для тестової одиниці для цієї версії 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) і проект залежить від іншої збірки, і одна з цих збірок у списку посилань позначена Copy Local = "False", збірка не може завантажуватися через відсутність залежностей та ваші тести не завантажуватимуться після збірки.


1

Схоже, NUnit Framework 2.6.4 не працює добре з тестовим адаптером NUnit. На веб-сайті він згадує, що тестовий адаптер працюватиме лише з NUnit Framework 2.6.3.

Це була моя проблема: 1. Я завантажив тестовий адаптер NUnit та NUnit окремо через Nuget у VS2012. Якось NUnit оновився до 2.6.4 Раптом я не побачив мої тестові справи в списку.

Виправити:

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

    а. Перейдіть до Інструменти> Nuget> Менеджер Nuget Pkg> Керування Nuget Pkg для рішення

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

    c. Клацніть управління

    г. Зніміть перевірку своїх проектів

  2. Встановіть тестовий адаптер NUnit, включаючи рамки NUnit 2.6.3

  3. Очистити / відновити рішення

  4. Відкрийте тест> Тестовий провідник> Запустити все

Я бачу всі тестові справи

Сподіваюсь, це допомагає


1

Жодне з рішень тут мені не допомогло. Тести не знайдеться для одного рішення, тоді як інше рішення, що стосується тих самих проектів, спрацювало чудово. Нарешті я вирішив це, видаливши файл solutionname.v12.suo.


1

У мене був такий самий випуск, але трохи інший.

Я використовував візуальну студію 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, і мої тести все ще не з'являлися.

Встановлення тестового адаптера NUnit3 через Інструменти> Розширення та оновлення виправлено для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.