Метод тестування є непереконливим: тест не виконувався. Помилка?


172

У мене є тестовий клас і нижче я розмістив зразок тесту з тестового класу

namespace AdminPortal.Tests.Controller_Test.Customer
{
    [TestClass]
    public class BusinessUnitControllerTests
    {
        private IBusinessUnitRepository _mockBusinessUnitRepository;
        private BusinessUnitController _controller;

        [TestInitialize]
        public void TestInitialize()
        {
            _mockBusinessUnitRepository = MockRepository.GenerateMock<IBusinessUnitRepository>();
            _controller = new BusinessUnitController(_mockBusinessUnitRepository);
        }

        [TestCleanup]
        public void TestCleanup()
        {
            _mockBusinessUnitRepository = null;

            _controller.Dispose();
            _controller = null;

        }

        #region Index Action Tests
        [TestMethod]
        public void Index_Action_Calls_GetAllBusinessUnit()
        {
            _mockBusinessUnitRepository.Stub(x => x.GetAllBusinessUnit());

            _controller.Index();

            _mockBusinessUnitRepository.AssertWasCalled(x=>x.GetAllBusinessUnit());
        }
    }
}

Коли я запускаю проект, я отримую наступний екран введіть тут опис зображення

Я перевірив посилання, і тестовий проект має посилання на основний проект. Будь-яка ідея, чому тест не проводиться, або каже, що вони були непереконливими?

Редагувати 1:

Я бачив повідомлення тут і змінив архітектуру процесора по замовчуванням налаштування моєї тестової в до X64 , але він по- , як і раніше не працює.


3
Це відома проблема в ReSharper. Тут є кілька потенційних рішень: stackoverflow.com/questions/12191352/… .
Кріс Мантл

3
Ви зробили чисте і відбудовували? Я пам’ятаю, що у VS2010 з'явилася якась дивна ситуація з втратою посилань на збірки після їх оновлення та відновлення.
Марк Уолш

@ChrisMantle Я перевірив це та змінив мою архітектуру процесорів за замовчуванням, але вона все ще не працює
Cybercop

@MarkWalsh Я використовую VS2012. Я все-таки очистив і відновив рішення, як ви сказали, але все ще не працює
Cybercop

Відповіді:


133

На всякий випадок, якщо жоден із перерахованих вище варіантів не працював ні для кого, я виправив свій примірник цієї помилки, помітивши пошкоджену запис у моєму App.Config через відсутність пакета нугів у тестовому проекті.


5
Тут же питання. Було б добре, якби R # перескакувала помилку (система ініціалізації конфігурації помилок), тому було б очевидно, чому тести не виконувались.
Джеффрі Худік

5
Дякую, я помилково поставив додатки поверх конфігурацій, переміщую його в потрібне положення, і воно працює.
anIBMer

3
Я додав specflow через nuget, і він вставив запис у App.config. Це створило всю неприємність. Я створив нову App.config і знову додав посилання, і воно виправилось. Дякую за інформацію
Vinee

Я можу підтвердити, що майже два роки після того, як ця посада була спочатку зроблена, це все ще здається життєздатним виправленням (я використовую VS 2015 та ReSharper 9.2).
Стівен Д.

2
Бінго! Дякую Крису. У моєму випадку це був розділ log4net без імені розділу обробки в <configSections>.
датпс

47

Для мене це було досить страшно, але я знайшов рішення для своєї справи принаймні:

Якщо ваш TestMethod асинхронізований, він не може бути недійсним. Це ОБОВ'ЯЗКОВО повернеться Завданням.

Сподіваюся, це комусь допоможе :)


37

У мене була така ж проблема з resharper, і я виправив цю помилку, змінивши параметр:

Resharper => Options => Tools => Unit Testing

Мені просто довелося зняти прапорець "Асамблеї тіньової копії тестуються"


2
Це сортувало це для мене, переглянувши набір інших виправлень. Я використовую VS 2013 та R #
v8.1

10
Не працювали для мене, я використовую VS2015 w / Reshaper 10.
Nemeas

Це отримало мене для роботи з VS2017 та Resharper Ultimate 2017.2.2 над тестовим проектом NETCore.
Завдання

Працював для мене, і зараз мені не потрібно чітко складати тести. Дякую Еліасу.
PhoenixPan

22

Це було питання Resharper. У параметрах Resharper-> Tools-> MSTEST я зняв галочку з Use Legacy Runner і тепер вона працює.


61
У мене немає цього параметра в меню Інструменти-> Тестування одиниць-> MsTest. (Resharper 9.2.)
cederlof

У мене також немає такої опції в R # 2017.2.
realsonic

Для мене варіантом було unter Tools-> Unit Testing-> MsTest та зняти прапорець.
Марсель

15

У мене була ця проблема, і вона виявилася такою ж, як ця проблема тут . Ця відповідь вирішила проблему для мене .

  1. Зніміть прапорець "Створювати лише запуску проектів та залежності від запуску" (Опції -> Проекти та рішення -> Створити та запустити)
  2. У програмі Configuration Manager переконайтесь, що і проект запуску, і тестовий проект встановили прапорець "Build".

Другий раз, коли я потрапив у цю проблему, це було пов’язано з амперсандом у файловому шляху до проекту, де проходять тести. Він чудово працює з тестовим бігуном ReSharper, але не з dotCover. Видаліть амперсанд з файлового контуру.

Це підтверджена помилка з dotCover.


1
Працювали для мене. VS2017 з ReSharper 2017.1.3 :-)
Ларс Холдгаард

12

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


Я (випадково) повернув зміни до файлу проекту при зміні гілки в Git. Коли я спробував запустити тест, клацнувши правою клавішею класу (вікно коду все ще було відкрито), воно не запустилося, оскільки воно не було частиною рішення.
mortb

12

Для мене проблемою був пошкоджений XML-файл налаштувань NUnit / ReSharper (через несподіваний дефіцит живлення).

Щоб визначити помилку, я запустив Visual Studio з цією командою :

devenv.exe /ReSharper.LogFile C:\temp\resharper.log /ReSharper.LogLevel Verbose

Вивчення файлу виявило наступне виняток:

09:45:31.894 |W| UnitTestLaunch                | System.ApplicationException: Error loading settings file
System.ApplicationException: Error loading settings file ---> System.Xml.XmlException: Root element is missing.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
   at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
   at System.Xml.XmlDocument.Load(XmlReader reader)
   at System.Xml.XmlDocument.Load(String filename)
   at NUnit.Engine.Internal.SettingsStore.LoadSettings()
   --- End of inner exception stack trace ---
   at NUnit.Engine.Internal.SettingsStore.LoadSettings()
   at NUnit.Engine.Services.SettingsService.StartService()
   at NUnit.Engine.Services.ServiceManager.StartServices()
   at NUnit.Engine.TestEngine.Initialize()
   at NUnit.Engine.TestEngine.GetRunner(TestPackage package)
   at JetBrains.ReSharper.UnitTestRunner.nUnit30.BuiltInNUnitRunner.<>c__DisplayClass1.<RunTests>b__0()
   at JetBrains.ReSharper.UnitTestRunner.nUnit30.BuiltInNUnitRunner.WithExtensiveErrorHandling(IRemoteTaskServer server, Action action)

Зауважте, що це НЕ тест-проект app.config!

Швидко погуглити навколо визначили наступний файл в якості винуватця:

%LOCALAPPDATA%\NUnit\Nunit30Settings.xml

Він існував, але був порожнім. Видалення його та перезапуск Visual Studio вирішили проблему.

(Використання Visual Studio Professional 2017 v15.3.5 та ReSharper 2017.2.1).


12

Я зіткнувся з цією проблемою в оновленнях 3 порівняно з 2017 року за допомогою Resharper Ultimate 2017.2

Перезапуск vs або перезапуск машини не можуть допомогти.

Я вирішив проблему, очистивши кеш таким чином:

    Resharper ->options-> Environment ->click the button 'Clear caches'

Оновлення:

У правому верхньому куті тестового вікна є кнопка "помилка" (я знаходжу в Resharper 2018).

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

Щоб відстежувати корінь проблеми, запустіть Visual Studio у режимі журналу. У порівнянні з 2017 роком, виконайте команду:

      devenv /ReSharper.LogFile C:\temp\log\test_log.txt /ReSharper.LogLevel Verbose

Виконати тест.

Перегляньте файл журналу test_log.txt і знайдіть «помилку» у файлі.

Файл журналу - це чудова допомога в пошуку помилки, яку ви можете усунути, або ви можете надіслати проблему з файлом журналу команді технічної підтримки Resharper .


7

Я також вирішив це питання. Однак жодне з рішень у цій темі не працювало. Ось що я зробив ...

Оскільки R # не давав жодних деталей про те, чому справи провалюються, я вирішив спробувати вбудований тестовий бігун VS2013. Він зазнав точно такої ж поведінки, коли жоден з тестів не проходив. Однак, дивлячись у вікно виводу, я нарешті отримав повідомлення про помилку:

Виняток стався під час виклику виконавця "виконавець: // mstestadapter / v1": Посилання на об'єкт не встановлено для екземпляра об'єкта.

Це привело мене до чергової нитки на SO із рішенням. Повірте, я б ніколи не здогадувався, в чому проблема.

Нещодавно я вніс кілька змін у файл AssemblyInfo.cs під час створення пакета NuGet. Одна із змін, включаючи визначення значення культури складання "en".

Я змінив це:

[assembly: AssemblyCulture("")] 

до цього:

[assembly: AssemblyCulture("en")]`. 

Це було все! Ось що незрозуміло зламало мої одиничні тести. Я все ще не розумію, чому, однак. Але принаймні все знову працює. Після того як я змінив цю зміну (тобто повернув культуру до ""), мої тести знову почали працювати.

Сподіваюся, що хтось там допомагає.


1
Я змінив культуру складання і R # перестав виконувати тести.
Валентина Захаренко

спасибі! перевірка вікна виводу виявила мою проблему, клас не був публічним!
Джоні Фельдман

7

У моєму випадку [Test]методи були просто private. Сором


1
Дивно, ReSharper просто поскаржився мені, що мої [Тестові] методи там, де приватні. Повинна бути нова функція.
Кевін Б Бернс

7

Моя проблема полягала в тому, що я встановив лише NUnit з nuget. Я не встановив NUnit3TestAdapter, який також був необхідний.

Install-Package NUnit3TestAdapter

Це одне з тих страхітливих питань, яке дає мало уявлення щодо реальної проблеми!
Бен Пауер

6

У моєму випадку це була помилка, яку я зробив під час копіювання stringstring в app.config .. Я помістив його всередині тега configSections!

Мені потрібно було деякий час, щоб зрозуміти, що ... завдяки VS intellisense, хоча .. або це було переробити?


в моєму випадку це було результатом недійсної зміни конфігураційного файлу
evgenyl

Моя проблема була спричинена поганим вирішенням конфлікту Git, що залишає інформацію про зміни голови в моєму вирішеному файлі конфігурації
KiwiSunGoddess

Майже те саме трапилося зі мною, я додав рядок з'єднання до розділу надмірних застосунків, коли я видалив надлишковий розділ Налаштування додатків і перемістив рядок підключення до початкової програми Настройки, в якій він працював.
Сірар Салих

Відповідь про пошкоджений app.config такий же , як перший один stackoverflow.com/a/21386881/52277
Майкл Freidgeim

5

У мене було подібне питання. VS 2010, c # CLR 2 Nunit 2.5.7, просто збірка> чисте рішення від VS допомогло вирішити цю проблему


5

У моєму випадку я створив метод асинхронного тесту, який повернувся void. Повернення Taskзамість voidвирішеного питання.


4

Ви нещодавно додали залежність від DLL? ... як я

Я просто зіткнувся з тим самим питанням, і це було дуже досадно, щоб не отримати жодної підказки у вікні тестового виходу або в іншому місці.

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


4

Я використовую VS2013, ReSharper 9.1 з розширенням MSpec від ReSharper та Moq. Я зазнав таку саму "непереконливу" помилку.

Виявилося, що мій Mock з Moq не був ініціалізований, а лише оголошений. Оні ініціалізували всі тести знову запустилися.


4

У моєму випадку я отримав цю помилку через режим "Випуск", де збірка проекту UnitTests була просто відключена. Перемикання в режим «Налагодження» виправлено.

Це дійсно дивно, що ReSharper не може нічого сказати, якщо він взагалі не може знайти бібліотеку UnitTests. Серйозно, соромно;)

Сподіваюся, це комусь допоможе


4

У моєму випадку всі тести в рамках деяких тестових проектів в рамках рішення не почали працювати після того, як я додав нові проекти. Використання VS 2017 з ReSharper 2017.1.2 тут.

Перш за все, переконайтеся, що ви не витрачаєте час, вважаючи, що ваша проблема пов'язана з ReSharper. Неважко припустити, що з ReSharper щось не так, якщо ви використовуєте його функції тестування одиниць, включаючи Unit Test Explorer . Відкрийте Visual Studio в Test Explorer , під Test меню і спробуйте запустити всі ». Додатковою перевагою цього є те , що вікно виведення з'явиться повідомлення про помилку , яке може вказувати вам в правильному напрямку. Якщо ви помітили , що той же самий набір тесту не запускаються, тоді можна з упевненістю припустити, що проблема пов’язана з Visual Studio, а не з ReSharper.

Я завершив видалення та повторне додавання однієї з платформ Active Active , будь-якого процесора , у програму Configuration Manager . Тим самим, після збереження змін та повторного відкриття рішення, всі тести знову почали працювати.

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


У моєму випадку у мене був нерозумний друк у app.config <AppConfig> замість <AppSettings>. Я люблю ReSharper, але їм дійсно потрібно працювати над своїми повідомленнями про помилки!
MichaelMilom

4

Для тих, хто відчуває цю проблему для мого тестового проекту .NET Core 2.0в Visual Studio 2017 Community (v15.3 3). Я також мав цю помилку за допомогою JetBrains ReSharper Ultimate 2017.2 Build 109.0.20170824.131346- є помилка, яку я опублікував.

JetBrains радив створити новий тестовий проект з нуля, щоб відтворити його. Коли я це зробив і тести працювали нормально, я виявив причину, що викликала проблему:

  • Видаліть це зі свого *.csprojфайлу:
  • Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}"

Коли я це зробив - тести почали чудово працювати.


Дмитро, дякую, мені це допомогло. Чи можете ви пояснити, що це за послуга?
Володимир

@VladimirMelekh перевірити це github.com/Microsoft/vstest/isissue/472
Дмитро Павлов

3

Я використовую VS2010, NUnit 2.6.3 (хоча внутрішньо ReSharper каже, що він використовує 2.6.2?), ReSharper 7.7.1 та NCrunch 2.5.0.12 і натрапляв на те саме "... тест є непереконливим ..." з NUnit, але NCrunch сказав, що все добре. Більшу частину сьогодні NUnit та NCrunch синхронізувались щодо того, які тести були задоволені та яким потрібен рефакторинг, тоді сталося щось, чого я досі не розумію, і деякий час NCrunch сказав, що я маю невдалі тести (але перейшовши через них, вони показали їм пас), то вирішив, що всі вони працюють, і NUnit почав скаржитися на всі мої тести, крім одного з тим же повідомленням "..тест непереконливий ...", який я знову зміг зробити один крок до проходу, хоча NUnit продовжував показати це як "непереконливий").

Я спробував кілька запропонованих вище пропозицій безрезультатно, і, нарешті, просто закрив VS2010 і знову відкрив рішення. Voila, тепер усі мої тести знову щасливі, і NCrunch & NUnit знову повідомляють про ті самі результати. На жаль, я не маю уявлення, що змінилося, щоб змусити їх синхронізуватись, але закриття та повторне відкриття VS2010, схоже, виправили це.

Можливо, хтось інший зіткнеться з цим і зможе скористатися цим простим (якщо в кінцевому рахунку незадовільним, оскільки ви не знаєте, що таке справжнє виправлення).


3

У мене був цей самий випуск. Винувателем стала зовнішня посилання, яка не сумісна з моїми налаштуваннями проекту. Щоб вирішити, я клацнув правою кнопкою миші проект-> властивості-> збір-> ціль платформи-> змінити з будь-якого процесора на x86.

Конкретний * .dll, з яким я працював, був System.Data.SQLite. Цей конкретний * .dll жорстко кодується для 32-бітної роботи. Параметр "Будь-який процесор" намагався завантажити його як 64 біт.


Невідповідність цільової платформи може також відбуватися з посиланнями на інші проекти всередині того самого рішення.
Chaquotay


3

У моєму випадку метод мого тестування був приватним, я змінив його на загальнодоступний і він працював.


3

Викликаний відсутнім (не пошкодженим) файлом App.Config. Додавання нового (Додати -> Новий елемент ... -> Файл конфігурації програми) виправлено.


3

У мене була така ж проблема. Вона була пов'язана з версією сумісності між NUnit 3.5 та Resharper 9.2, оскільки вона була вирішена шляхом пониження рівня з NUnit 3.5 до 2.6.4. Це працювало для мене. Щасти.


У мене була складена тестова збірка проти 3.6.1, і моя основна тестова збірка була складена проти 3.7.1. Знизився до 3.6.1 і тепер це все добре.
Том

Це стосувалося ReSharper 2017.3.2 та NUnit 3.11. Переглянути коментар до nunit github.com/nunit/nunit/isissue/3086#issuecomment-466988760
Путердо Борато

3

Якщо ви використовуєте xUnit, я вирішив проблему встановлення xunit.running.visualstudioпакета. (наразі використовується xUnit 2.3.1та VS17 Enterprise 15.3.5)


3

У мене виникли ті ж проблеми, щоб запустити будь-який тест за допомогою NUnit Framework. Visual Studio 2017 15.5.6 "Непереконливо: тест не запускається"

ReSharper Ultimate 2017.3.3 збірка 111.0.20180302.65130

РІШЕННЯ Додавання залежності проекту до Microsoft.NET.Test.Sdk


Не допомогло в моєму випадку
Дмитро Автономов

2

Для тих, хто поспішає з тестовим виконанням, мені довелося використовувати тест-дослідник VS 2017 для запуску тестів;

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

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


2

Ця помилка сталася з Visual Studio 2017 та перезавантажуваною версією 2018.2.3, але виправлення стосується версій Visual Studio 2019 до.

Виправити тести, які працюють в Resharper, було просто оновити до останньої версії Resharper (2019.2.1) на момент написання.


1

У мене було саме таке питання, і нічого не допомогло.

врешті-решт я побачив, що у мене невідповідність просторів імен одиничного проекту та тестового проекту.

Простір імен мого одиничного проекту - unit.project, а тестовий проект був названий unit.project.tests, але простір імен тесту за замовчуванням був таким самим, як одиниця, обидва - unit.project.

Після оновлення просторів імен, щоб вони були різними (по одному простору імен для кожного проекту), все працювало!


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