Visual Studio 2013 не виявляє одиничні тести


146

У візуальній студії 2013 у мене є просте рішення, яке складається з одного веб-проекту, одного бібліотечного проекту та одного тестового проекту. Коли я відкриваю рішення і намагаюся запустити одиничні тести, їх візуальна студія не виявить. Для запуску тестів я намагаюся зайти в меню і вибрати пункт Test -> Run -> Run all тести або відкривши вікно тестового дослідника. Згідно методам, візуальна студія не виявляє жодних тестів у рішенні.

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

У цьому проекті я працював один, який використовував git control source, інтегрований із командою візуальної студії. Проблема візуальної студії не виявити одиничні тести починається, коли до проекту прийшов новий елемент і коли мені потрібно відтворити рішення через керування джерелами в Інтернеті. До цього всі тести завжди були відкриті візуальною студією.

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

Усі мої тести такі:

[TestClass] 
public class Service1Test 
{ 
    [TestMethod] 
    public void Test1() 
    {
        Assert.IsTrue(True); 
    } 
}

2
Це ці випробування на основі Async?
Джеймі Кілінг

Не впевнений, у чому виникла проблема, але я працюю як адміністратор виправив проблему для мене.
Шрірам Сактівель

Усі тестові одиниці на основі синхронізації
miguelbgouveia

2
Ви пробували зовнішній тестовий запуск (наприклад, ReSharpers або NCrunch)? Можливо, ваша програма встановлена ​​помилками (тому перевстановіть VS)
Carsten

1
Жодне з них не вирішило для мене проблему :( Що за катастрофа. Я відмовився від NUnit і покладаюся на UnitTestFramework - химерно протилежну проблему від ОП
Адам,

Відповіді:


210

Деякі речі, які я помічав, час від часу потрібно робити, щоб здати тести, щоб правильно відобразитися.

  1. Якщо ваше рішення знаходиться на захищеному диску, вам потрібен доступ адміністратора для читання / запису, іноді з'являється лише частина тестів. У цьому випадку обов'язково запустіть VS як адміністратора.

  2. Якщо ваше рішення 64-бітне, переконайтесь, що для параметра Test> Settings Settings> Архітектура процесора за замовчуванням встановлено значення x64. Іноді він встановлюється на x86. Встановіть його на x64, а потім відновіть.

  3. Іноді просто перезапуск Visual Studio робить трюк, оскільки тестовий провідник запуститься знову.

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

  5. Переконайтесь, що тести перебувають у publicрозділі вашого тестового класу


34
Я усвідомлюю, що ця відповідь трохи пізно, але мій пошук в Google привів мене сюди, і нічого згаданого не вирішило мою проблему. Врешті-решт я зрозумів, що це номер 2 у моєму списку, тому я хотів залишити ці знання, а також інші хитрощі, які я підбирав з часом.
AndyG

7
Комбінація №2 і №3 зробила це для мене. Visual Studio поскаржився на те, що ряд моїх проектів (нетестових) в моєму рішенні було виключено з кроку тестового відкриття, оскільки вони були побудовані для x86, але це було нормально.
Нейт Барбеттіні

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

6
У мене була така ж проблема в VS2015. №2 вирішив проблему.
mcolegro

2
Я поняття не маю, чому люди платять стільки грошей за товар, який так часто виходить з ладу. Мені довелося модернізувати свій проект до 2015 року та зробити №3 2 рази, перш ніж він виявив мій тест.
Метью Хогган

81

Якщо ви використовуєте NUnit, спочатку завантажте адаптер NUnit.

Перейдіть до Інструменти → Розширення та оновлення ... → Інтернет → пошук "Тестовий адаптер NUnit".


2
Я використовую UnitTests від Microsoft. У цьому випадку я вважаю, що не потрібно нічого встановлювати.
miguelbgouveia

1
Це зробив для мене - сильно зобов’язаний.
Матас Вайткевічус

Це зафіксувало це для мене. Дякую.
jjthebig1

Оновлено як і вирішення проблеми, але чи потрібно мати адаптер NUnit або Visual Stdio повинен працювати з NUnit поза коробкою.
Owain Glyndŵr

Ви бог, сер.
Nox

61

Переконайтесь, що ваш тестовий клас publicтаким чином його можна знайти. А якщо ви посилаєтесь на інший клас, переконайтесь у тому ж.

Крім того, іноді, якщо у вас немає анкет або ви не прикрашаєте тест [TestMethod], тест може не розпізнати.

Ще 2 речі: 1) Тести блоку асинхроніки в кращому випадку діють смішно, а в гіршому - жодне. Подивіться на цю статтю по Стівен Клірі і зберегти звідти , якщо це вас цікавить.

2) Якщо ви використовуєте NUnit і [TestCase]стикаєтеся з тими ж проблемами, майте на увазі, що це замість Nunit[TestMethod]

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


1
Усі мої тести виглядають так: [TestClass] публічний клас 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, але один набір мого тесту пройшов, а інших не побачив. При ретельному огляді було багато винятків у випуску, хоча всі тести пройшли.
Багатий Шилер

Так було і для мене. У мене був запущений набір "update-package", не усвідомлюючи його оновлення від NUnit 2.x до 3.x.
Єнс

В даний час тестовий адаптер NUnit 3.0 неможливо знайти через NuGet (див. NUnit 3.0 Wiki ). Однак це може бути встановлено як розширення.
vauhochzett

1
Велике спасибі Френку. Це вирішило моє питання. Тепер я можу побачити результати тестування у вікні консолі :)
santosh kumar patro

12

У мене час від часу виникає ця проблема. Що для мене працює - це вимкнути Visual Studio і перейти до папки:

%LocalAppData%\Microsoft\VisualStudio\12.0\ComponentModelCache

і видаліть його вміст.

Після відкриття Visual Studio та завантаження проекту ще раз Тестовий Провідник повинен містити ваші тести


Для мене це не працює. Я використовую Visual Studio 2013 Express з останнім часом встановлення 5. Досі не з'являються одиничні тести.
miguelbgouveia

Це було для мене і працівником. Навіть працював без перезавантаження візуальної студії. Години в стоку нарешті закінчилися.
Стефан Райер

Цей каталог більше не існує у VS2017.
Ноель Відмер

Дякую, вона працює для мене для будь-якої з цих папок, може мати різну версію залежно від установки візуальної студії, як для мене це%LocalAppData%\Microsoft\VisualStudio\16.0_03b7a93c\ComponentModelCache
Раві Кумар Mistry

12

Користувачі XUnit можуть помітити, що у вікні Test Explorer більше не вказано жодних тестів. Щоб зробити тести знову відкритими, спробуйте цю важливу пораду , виділену нижче.

Якщо у вас є проблеми з виявленням або запуском тестів, ви можете стати жертвою пошкодженого кеша бігуна у Visual Studio. Щоб очистити цей кеш, закрийте всі екземпляри Visual Studio, а потім видаліть папку% TEMP% \ VisualStudioTestExplorerExtensions. Також переконайтеся, що ваш проект пов'язаний лише з однією версією пакета NuGet Runner Visual Studio (xunit.runner.visualstudio).

Введіть TEMP, щоб знайти цільову папку


Це не спрацювало для мене. Test explorer просто не знаходить свого тесту, і наскільки я можу сказати, що я не роблю це неправильно, і я пробував деякі рішення тут без успіху.
Skychan

Використання MsTestV2 - це було єдине, що вирішило цю проблему
Натан

5

Для майбутніх гуглерів у мене був рідкісний сценарій, який спричинив це.

У своєму базовому тестовому класі я мав властивість під назвою TestContext. Це заважало збереженому властивості TestContext MSTest, що спричинило приховання всіх моїх тестів від VS / Resharper, крім одного (який не успадковано від бази).


1
попав і мене! Я забув зробити властивість тестового контексту public.
escape-llc

4

для мене це було зміною "конфігурацій рішення" на "Налагодження" (замість випуску).


4

Моя проблема полягала в тому, що мій метод тестування одиниці був недійсним , і він отримував параметри.


З усіх речей .... Це була моя проблема, і біт парам має сенс. Зрештою, що б тест-система знала пройти? Там є рішення зробити тестовий метод, коли ви вручну викликаєте метод, який ви хочете протестувати. Якщо ви тестуєте проект WebAPI і маєте програму Get with params, вам все одно доведеться мати відповідний Get call, але він не з’явиться в Explorer.
MetalPhoenix

4

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


1
Це не дає відповіді на вищезазначене питання, але це саме та проблема, яку я намагався вирішити. Тож у вас трапилось ДТП +1 :) Дякую вам дуже!
CF

3

Спробуйте створити всі проекти як MSIL (будь-який процесор) замість x86 / x64. Працювали для мене дивно


Мені просто довелося скласти тестовий проект за допомогою будь-якого процесора, інші проекти залишилися x64
Eduardo Brites

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

Я зіткнувся з тією ж проблемою і знову згадав (така ситуація траплялася раніше), що вибір "Змішаної платформи" в меню платформи рішень працює, як і інші відповіді.


Але де знаходиться меню платформи рішень? Це в Visual Studio? Я використовую Visual Studio Express 2013 для Інтернету, і я не можу знайти це меню.
miguelbgouveia



1

перейдіть до меню проекту> Менеджер конфігурацій перевірте, чи ваша тестова платформа проекту відповідає решті проекту, і встановіть прапорець для складання, а потім відновіть.


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


Я знав, що використання іншого блоку тестування блоку вирішить мою проблему. Але якщо я хотів би продовжувати використовувати рамки тестів Microsoft Unit, це не є рішенням.
miguelbgouveia

1

Щоб тести були показані у вікні Test Explorer, мені довелося встановити NUnit3 Test Adapter 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

Вибачте за те, що я додав до довгого списку, але у мене була зовсім інша проблема. По-перше, я хотів би зазначити, що я виявив свою проблему, натиснувши "Запустити все" у Тестовому Провіднику, а потім переглянув вікно виведення збірки у Visual Studio. Ви повинні активно спостерігати за цим, оскільки згодом повідомлення зникає.

Що стосується проблеми, то, схоже, під час сканування тестів DLL завантажується і типи його тестів перераховуються. Це призводить до завантаження посилань, і якщо під час цього процесу виникне збій, тести не будуть показані в провіднику. У мене було два проблеми, що запобігали успішному завантаженню тестової DLL:

  • У конфігураційному файлі залишалося перенаправлення прив’язки (переадресація на версію NHiberate нижчої версії, ніж на те, на яке посилалось у тестовому проекті).
  • Суперечлива посилання на збірку (посилання другого рівня не вдається завантажити). AsmSpy - це чудовий інструмент для полювання на них.

Я зіткнувся з тим же питанням, важко виявив, які DLL не завантажують ....
amarnath chatterjee

1

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


1

Провівши 2 дні ... нічого з перерахованого вище не працювало для мене. Єдиним "рішенням" було: Перейти до властивостей проекту -> Tab Build. Потім натисніть кнопку Додатково в правому нижньому куті панелі. Змініть "Інформація про налагодження:" на "повну" та натисніть кнопку ОК.

Ось знімки екрана: введіть тут опис зображення

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


0

Я зіткнувся з тим же питанням. І досліджував, і виявив, що dll не побудований, і помістив у потрібну папку. як тільки я змінив конфігурацію, вони з'явилися. - Параметри побудови проектів, яку папку слід використовувати? - конфігурація побудови вхідного меню, їх слід перевірити.

що це виправило для мене.


Для мене, DLL для тестів також не були побудовані, тому що візуальна студія не знаходить визначених тестів. Я використовую Visual Studio Express, і у мене немає запису меню Build. Але в моєму менеджері конфігурацій я перевірив усі параметри збірки. Отже, я думаю, що це не проблема для моєї справи.
miguelbgouveia

@miguelbgouveia, навпаки - VS створює DLL, а потім сканує їх для тестів. Тому якщо у вас немає тестових проектів DLL, ви точно не знайдете тестів.

0

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


1
Це у вирішенні вашого проекту. Клацніть правою кнопкою миші файл вашого проекту в Провіднику рішень -> Відкрити папку в Провіднику файлів. Перейдіть звідти до одного каталогу та видаліть / TestResults каталог. Можливо, вам доведеться вимкнути Visual Studio, щоб видалити все. Він відновить каталог наступного разу, коли проект буде відкрито.
MartijnK

0

Будьте впевнені, що всі ваші проекти працюють з однаковою конфігурацією. У розділі Властивості вашого проекту => Налагодження => Платформа у спадному списку виберіть відповідну платформу (для мене це була "Будь-який процесор"), як визначено у інших ваших проектах.


0
  • Я знаю, що одиничні тести не знайдені, якщо рішення не побудовано, тож щось спробувати (побудувати рішення), але це рішення, як у службі довідки із запитом, чи підключений ваш комп'ютер ...
  • Після того, як чиста перебудова не усунула проблему для мене, запуск повної збірки партії вирішив її.

0

Мав те саме питання; тести раптово перестали виявлятися.

Тест-адаптер Nunit якось відключився. Клацання включення в менеджері розширень виправило для мене.


0

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


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