Metoda testu nie daje jednoznacznych wyników: test nie został uruchomiony. Błąd?

172

Mam klasę testową, a poniżej zamieściłem przykładowy test z klasy testowej

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());
        }
    }
}

Po uruchomieniu projektu pojawia się następujący ekran wprowadź opis obrazu tutaj

Sprawdziłem referencje i projekt testowy ma odniesienie do projektu głównego. Masz pojęcie, dlaczego testy nie działają lub mówią, że nie są rozstrzygające?

Edycja 1:

Widziałem tutaj post i zmieniłem domyślną architekturę procesora w ustawieniach mojego testu na X64, ale nadal nie działa.

Cybercop
źródło
3
To znany problem w ReSharper. Istnieje kilka potencjalnych rozwiązań tutaj: stackoverflow.com/questions/12191352/… .
Chris Mantle,
3
Czy wyczyściłeś i odbudowałeś? Pamiętam, że w VS2010 jest trochę dziwności z utratą odniesień do zestawów po ich zaktualizowaniu i odbudowaniu.
Mark Walsh,
@ChrisMantle Sprawdziłem to i zmieniłem domyślną architekturę procesora, ale nadal nie działa
Cybercop
@MarkWalsh Używam VS2012. Nadal wyczyściłem i odbudowałem rozwiązanie, jak powiedziałeś, ale nadal nie działa
Cybercop
9
to pytanie jest omawiane na meta
komar

Odpowiedzi:

133

Na wszelki wypadek żadna z powyższych opcji nie zadziałała dla nikogo, naprawiłem moje wystąpienie tego błędu, zauważając uszkodzony wpis w mojej aplikacji App.Config z powodu brakującego pakietu NuGet w projekcie testowym.

Chris Pacey
źródło
5
Ten sam problem tutaj. Byłoby miło, gdyby R # bąbelkował błąd (błąd inicjowania systemu konfiguracji), więc byłoby oczywiste, dlaczego testy nie zostały uruchomione.
Geoffrey Hudik
5
Dzięki, dla mnie, przez pomyłkę umieściłem appsettings na konfiguracjach, przeniosłem go do odpowiedniej pozycji i działa.
anIBMer
3
Dodałem specflow przez NuGet i wstawiłem wpis do App.config. To stworzyło cały problem. Utworzyłem nowy plik App.config i ponownie dodałem odniesienie i zostało to naprawione. Dzięki za informacje.
Vinee
Mogę potwierdzić, że prawie dwa lata po tym, jak ten post został pierwotnie utworzony, nadal wydaje się, że jest to realna poprawka (używam VS 2015 i ReSharper 9.2).
Steven D.
2
Bingo! Dzięki Chris. W moim przypadku była to sekcja log4net bez nazwy sekcji obróbkowej w <configSections>.
datps
47

Dla mnie było to dość frustrujące, ale przynajmniej znalazłem rozwiązanie dla mojego przypadku:

Jeśli metoda TestMethod jest asynchroniczna, nie może zostać unieważniona. MUSI zwrócić Task.

Mam nadzieję, że to komuś pomoże :)

Krzysztof Skowronek
źródło
37

Miałem ten sam problem z resharper i poprawiłem ten błąd, zmieniając opcję:

Resharper => Opcje => Narzędzia => Testy jednostkowe

Musiałem tylko odznaczyć opcję „Testowane zestawy kopiowania w tle”

Elias Platek
źródło
2
To załatwiło sprawę dla mnie, po obejrzeniu wielu innych poprawek. Używam VS 2013 i R # v8.1
Spikeh,
10
Nie działa dla mnie, używam VS2015 w / Reshaper 10.
Nemeas
Dało mi to pracę z VS2017 i Resharper Ultimate 2017.2.2 w projekcie testowym NETCore.
Tasker,
U mnie zadziałało i nie muszę teraz czyścić kompilacji do testów. Dzięki Elias.
PhoenixPan
22

To był problem Resharper. W opcjach Resharper-> Narzędzia-> MSTEST, odznaczyłem Use Legacy Runner i teraz działa.

Cybercop
źródło
61
Nie mam tej opcji w menu Narzędzia-> Testy jednostkowe-> MsTest. (Resharper 9.2.)
cederlof
Nie mam też takiej opcji w R # 2017.2.
realsonic
Dla mnie opcja była w menu Narzędzia-> Testowanie jednostkowe-> MsTest i odznaczenie pomogło.
Marcel,
15

Miałem ten problem i okazało się, że jest taki sam jak ten tutaj . Ta odpowiedź rozwiązała problem za mnie .

  1. Usuń zaznaczenie opcji „Twórz tylko projekty startowe i zależności przy uruchomieniu” (Opcje -> Projekty i rozwiązania -> Kompiluj i uruchamiaj)
  2. W programie Configuration Manager upewnij się, że zarówno projekt startowy, jak i projekt testowy mają zaznaczoną opcję „Kompiluj”.

Drugi raz napotkałem ten problem, było to spowodowane znakiem ampersand w ścieżce pliku do projektu, w którym znajdują się testy. Działa dobrze z programem do uruchamiania testów ReSharper, ale nie z dotCover. Usuń znak ampersand ze ścieżki pliku.

To potwierdzony błąd dotCover.

Gumowa kaczuszka
źródło
1
Pracował dla mnie. VS2017 z ReSharper 2017.1.3 :-)
Lars Holdgaard
12

U mnie samo wyczyszczenie i odbudowanie rozwiązania naprawiło to.

Mike Chamberlain
źródło
Miałem (przypadkowo) cofnąć zmiany w pliku projektu podczas zmiany gałęzi w Git. Kiedy próbowałem uruchomić test, klikając prawym przyciskiem myszy w klasie (okno kodu było nadal otwarte), nie działał, ponieważ nie był częścią rozwiązania.
mortb
12

Dla mnie problemem był uszkodzony plik XML ustawień NUnit / ReSharper (z powodu nieoczekiwanego braku zasilania).

Aby zidentyfikować błąd, który uruchomiłem Visual Studio za pomocą tego polecenia :

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

Analiza pliku ujawniła następujący wyjątek:

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)

Zauważ, że to NIE jest to plik app.config projektu testowego!

Szybkie googling wokół zidentyfikowano następujące plik jako sprawcy:

%LOCALAPPDATA%\NUnit\Nunit30Settings.xml

Istniał, ale był pusty. Usunięcie go i ponowne uruchomienie programu Visual Studio rozwiązało problem.

(Korzystanie z programu Visual Studio Professional 2017 w wersji 15.3.5 i ReSharper 2017.2.1).

Reyhn
źródło
12

Zmierzyłem się z tym problemem w aktualizacji 3 w porównaniu z 2017 w Resharper Ultimate 2017.2

Restart vs lub restart machine nie może pomóc.

Rozwiązałem problem, czyszcząc pamięć podręczną w następujący sposób:

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

Aktualizacja:

W prawym górnym rogu okna testowego znajduje się przycisk „błąd” (znajduję się w Resharper 2018).

Kliknięcie przycisku błędu powoduje wyświetlenie komunikatu o błędzie, który może pomóc w rozwiązaniu problemu.

Aby śledzić źródło problemu, uruchom program Visual Studio w trybie dziennika. W porównaniu z 2017, uruchom polecenie:

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

Uruchom test.

Przejrzyj plik dziennika test_log.txt i wyszukaj w nim „błąd”.

Plik dziennika jest bardzo pomocny w znalezieniu błędu, który można rozwiązać, lub można wysłać problem z plikiem dziennika do zespołu pomocy technicznej Resharper .

M.Hassan
źródło
7

Właśnie rozwiązałem ten problem. Jednak żadne z rozwiązań w tym wątku nie zadziałało. Oto, co zrobiłem ...

Ponieważ R # nie podał żadnych szczegółów na temat tego, dlaczego coś się nie udaje, zdecydowałem się wypróbować wbudowany tester VS2013. Doświadczył dokładnie tego samego zachowania, gdy żaden z testów nie został przeprowadzony. Jednak patrząc w okno Output, w końcu pojawił się komunikat o błędzie:

Wystąpił wyjątek podczas wywoływania modułu wykonawczego „executor: // mstestadapter / v1”: odwołanie do obiektu nie jest ustawione na instancję obiektu.

To doprowadziło mnie do kolejnego wątku na SO z rozwiązaniem. Uwierz mi, NIGDY nie odgadłbym, na czym polega problem.

Niedawno wprowadziłem kilka zmian w pliku AssemblyInfo.cs podczas tworzenia pakietu NuGet. Jedna ze zmian obejmuje określenie wartości kultury asemblera „en”.

Zmieniłem to:

[assembly: AssemblyCulture("")] 

do tego:

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

To było to! To właśnie w niewytłumaczalny sposób złamało moje testy jednostkowe. Jednak nadal nie rozumiem, dlaczego. Ale przynajmniej wszystko znowu działa. Po cofnięciu tej zmiany (tj. Ustawieniu kultury z powrotem na „”) moje testy zaczęły działać ponownie.

Mam nadzieję, że to komuś pomoże.

mikesigs
źródło
1
Zmieniłem kulturę montażu i R # przestał uruchamiać testy.
Valentine Zakharenko
Dziękuję Ci! sprawdzenie okna wyjściowego ujawniło mój problem, klasa nie była publiczna!
Jony Feldman
7

W moim przypadku [Test]metody były sprawiedliwe private. Wstyd

pkuderov
źródło
1
Dziwne, ReSharper po prostu skarżył się, że moje metody [Test] są prywatne. To musi być nowa funkcja.
Kevin B Burns
7

Mój problem polegał na tym, że zainstalowałem NUnit tylko z nuget. Nie zainstalowałem NUnit3TestAdapter, który również był wymagany.

Install-Package NUnit3TestAdapter
Mike Olund
źródło
Jest to jeden z tych frustrujących problemów, który daje niewielką wskazówkę co do rzeczywistego problemu!
Ben Power
6

W moim przypadku był to błąd, który popełniłem podczas kopiowania ciągu połączenia w pliku app.config .. Umieściłem go w tagu configSections!

Zajęło mi trochę czasu, zanim zdałem sobie sprawę, że ... dzięki VS intellisense ... czy to było coś więcej?

Kcats Wolfrevo
źródło
w moim przypadku był to wynik nieprawidłowej zmiany w pliku konfiguracyjnym
evgenyl
Mój problem został spowodowany przez złe Git rozwiązywania konfliktów pozostawiając informacje wymiany głowicy w moim rozwiązany pliku konfiguracyjnym
KiwiSunGoddess
Prawie to samo przytrafiło mi się, dodałem parametry połączenia do nadmiarowej sekcji appSettings, kiedy usunąłem nadmiarową sekcję appSettings i przeniosłem parametry połączenia do oryginalnego appSettings, które działały.
Sirar Salih
Odpowiedź dotycząca uszkodzonego pliku app.config jest taka sama, jak pierwsza stackoverflow.com/a/21386881/52277
Michael Freidgeim
5

Miałem podobny problem. VS 2010, c # CLR 2 Nunit 2.5.7, po prostu skompiluj> czyste rozwiązanie z VS pomogło rozwiązać ten problem

Abdul Jabbar
źródło
5

W moim przypadku utworzyłem metodę testową asynchroniczną, która zwróciła void. Zwrot Taskzamiast voidrozwiązania problemu.

Neshta
źródło
4

Czy ostatnio dodałeś jakieś zależności DLL? ... jak ja

Właśnie natknąłem się na ten sam problem i bardzo irytujące było to, że nie dostałem żadnej wskazówki w oknie wyników testu ani w innym praktycznym miejscu.

Przyczyna była wyjątkowo głupia: po prostu dodałem dzień wcześniej zależność do dodatkowej zewnętrznej biblioteki DLL w podprojekcie, a aplikacja głównego projektu rzeczywiście została zbudowana i działała poprawnie po zmianie. Ale moje testy jednostkowe są w siostrzanym projekcie głównej aplikacji, a zatem mają również zależność od tego zmienionego projektu podrzędnego, w którym wywołano bibliotekę DLL ... jednak lokalizacja projektu testowego w czasie wykonywania nie jest taka, jak w głównej aplikacji! Tak więc zmiana kompilacji w celu skopiowania brakującej biblioteki DLL do katalogu testowego środowiska wykonawczego rozwiązała problem.

berhauz
źródło
4

Używam VS2013, ReSharper 9.1 z rozszerzeniem MSpec z ReSharper i Moq. Wystąpił ten sam „niejednoznaczny” błąd.

Okazało się, że jeden z moich Mocków z Moq nie został zainicjowany, tylko zadeklarowany. One zainicjowały wszystkie testy uruchomione ponownie.

Espen Ekvang
źródło
4

W moim przypadku otrzymałem ten błąd z powodu trybu „Release”, w którym po prostu wyłączono kompilację projektu UnitTests. Powrót do trybu „Debuguj” naprawił problem.

To naprawdę zaskakujące, że ReSharper nie może nic powiedzieć, jeśli w ogóle nie może znaleźć biblioteki UnitTests. Poważnie, szkoda;)

Mam nadzieję, że to komuś pomoże

RR-Fireball
źródło
4

W moim przypadku wszystko testy w ramach niektórych projektów testowych w ramach rozwiązania przestały działać po dodaniu nowych projektów. Używanie VS 2017 z ReSharper 2017.1.2 tutaj.

Przede wszystkim upewnij się, że nie marnujesz czasu, zakładając, że Twój problem jest związany z ReSharper. Łatwo jest założyć, że coś jest nie tak z ReSharper, jeśli używasz jego funkcji testowania jednostkowego, w tym Unit Test Explorer . Otworzyć Visual Studio testu Explorer w ramach testów menu i spróbuj Run Wszystko ”. Dodatkową zaletą tego rozwiązania jest to, że okno wyświetlania pokaże się komunikat o błędzie, który może skierować Cię w dobrym kierunku. Jeśli zauważysz, że ten sam zestaw testów nie są uruchamiane, można bezpiecznie założyć, że problem dotyczy programu Visual Studio, a nie ReSharper.

Skończyło się na usunięciu i ponownym dodaniu jednej z platform aktywnych rozwiązań , Dowolny procesor , w Configuration Manager . W ten sposób po zapisaniu moich zmian i ponownym otwarciu rozwiązania wszystkie testy zaczęły działać ponownie.

Wydaje mi się, że w pliku rozwiązania pojawił się nieoczekiwany wpis konfiguracyjny, gdy dodałem nowe projekty i używając odtwarzania jednej z platform, poprawił się. Próbowałem się różnić, ale trudno było stwierdzić, co się zmieniło, co spowodowało problem.

Wonster
źródło
W moim przypadku miałem głupią literówkę w app.config <AppConfig> zamiast <AppSettings>. Uwielbiam ReSharper, ale NAPRAWDĘ muszą popracować nad swoimi komunikatami o błędach!
MichaelMilom
4

Dla tych, którzy doświadczają tego problemu w moim projekcie testowym .NET Core 2.0w Visual Studio 2017 Community (v15.3 3). Miałem również ten błąd przy użyciu JetBrains ReSharper Ultimate 2017.2 Build 109.0.20170824.131346- jest błąd, który opublikowałem.

JetBrains doradził stworzenie od podstaw nowego projektu testowego w celu jego odtworzenia. Kiedy to zrobiłem i testy działały poprawnie, znalazłem przyczynę problemu:

  • Usuń to z *.csprojpliku:
  • Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}"

Kiedy to zrobiłem - testy zaczęły działać dobrze.

Dmitry Pavlov
źródło
Dmitry, dziękuję, pomogło mi. Czy możesz wyjaśnić, co to za usługa?
Vladimir Melekh
@VladimirMelekh sprawdź ten github.com/Microsoft/vstest/issues/472
Dmitry Pavlov
3

Używam VS2010, NUnit 2.6.3 (chociaż wewnętrznie ReSharper twierdzi, że używa 2.6.2?), ReSharper 7.7.1 i NCrunch 2.5.0.12 i uruchomiłem to samo „... test jest niejednoznaczny ...” z NUnit, ale NCrunch powiedział, że wszystko jest w porządku. Przez większość dnia NUnit i NCrunch były w synchronizacji, uzgadniając, które testy były szczęśliwe, a które wymagały refaktoryzacji, potem wydarzyło się coś, czego nadal nie rozumiem, i przez chwilę NCrunch powiedział, że testy zakończone niepowodzeniem (ale przejście przez nie pokazało im, że pass), a następnie zdecydował, że wszystkie działają, a NUnit zaczął narzekać na wszystkie moje testy, z wyjątkiem jednego z tym samym komunikatem „..test is inc-rozstrzygający…”, przez który ponownie mogłem przejść do przejścia, mimo że NUnit kontynuował aby pokazać to jako „niejednoznaczne”).

Wypróbowałem kilka powyższych sugestii bezskutecznie, a ostatecznie po prostu zamknąłem VS2010 i ponownie otworzyłem rozwiązanie. Voila, teraz wszystkie moje testy znów są szczęśliwe, a NCrunch i NUnit ponownie raportują te same wyniki. Niestety nie mam pojęcia, co się zmieniło, aby spowodować utratę synchronizacji, ale wydaje się, że zamknięcie i ponowne otwarcie VS2010 naprawiło to.

Może ktoś inny wpadnie na to i będzie mógł skorzystać z tego prostego (jeśli ostatecznie niezadowalającego, ponieważ nie wiesz, jaka jest prawdziwa poprawka).

delliottg
źródło
3

Miałem ten sam problem. Przyczyną było odwołanie zewnętrzne niezgodne z ustawieniami kompilacji projektu. Aby rozwiązać ten problem, kliknąłem prawym przyciskiem myszy projekt-> właściwości-> kompilacja-> Platforma docelowa-> zmień z Any CPU na x86.

Konkretny plik * .dll, z którym pracowałem, to System.Data.SQLite. Ten konkretny plik * .dll jest zakodowany na stałe dla operacji 32-bitowych. Ustawienie „Dowolny procesor” próbowało załadować go jako 64-bitowy.

sapbucket
źródło
Niezgodność celu platformy może również wystąpić w przypadku odwołań do innych projektów w ramach tego samego rozwiązania.
Chaquotay
3

Moje rozwiązanie:

NUnit 3.2.0 ma pewne problemy z Resharper - downgrade do 2.6.4:

update-package nunit -version 2.6.4
David McEleney
źródło
3

W moim przypadku moja metoda testowa była prywatna, zmieniłem ją na publiczną i zadziałała.

Andrew Burns
źródło
3

Spowodowany brakującym (nie uszkodzonym) plikiem App.Config. Dodanie nowego (Dodaj -> Nowy element ... -> Plik konfiguracyjny aplikacji) naprawiło to.

AnotherFineMess
źródło
3

Miałem ten sam problem, który był związany z wersją kompatybilności między NUnit 3.5 a Resharper 9.2, ponieważ został rozwiązany poprzez przejście z NUnit 3.5 do 2.6.4. U mnie to zadziałało. powodzenia.

Ali Golgol
źródło
Miałem zestaw testowy skompilowany w wersji 3.6.1, a mój główny zestaw testowy został skompilowany w wersji 3.7.1. Obniżony do wersji 3.6.1, a teraz wszystko jest w porządku.
Tom
Tak było w przypadku ReSharper 2017.3.2 i NUnit 3.11. Zobacz komentarz dotyczący nunit github.com/nunit/nunit/issues/3086#issuecomment-466988760
Puterdo Borato
3

Jeśli używasz xUnit, rozwiązałem problem z instalacją xunit.running.visualstudiopakietu. (obecnie używa xUnit 2.3.1i VS17 Enterprise 15.3.5)

Alessio Di Salvo
źródło
3

Miałem ten sam problem, aby uruchomić dowolny test przy użyciu frameworka NUnit. „Niejednoznaczne: test nie został uruchomiony” Visual Studio 2017 15.5.6

ReSharper Ultimate 2017.3.3 kompilacja 111.0.20180302.65130

ROZWIĄZANE Dodanie zależności projektu do Microsoft.NET.Test.Sdk

Juliusz Cezar
źródło
Nie pomogło w moim przypadku
Dmitry Avtonomov
2

Dla tych, którzy spieszą się do wykonania testów, musiałem użyć eksploratora testów VS 2017 do uruchomienia testów;

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

Teoman shipahi
źródło
2

Ten błąd wystąpił w przypadku programu Visual Studio 2017 i programu Resharper w wersji 2018.2.3, ale poprawka dotyczy wersji programu Visual Studio 2019 do.

Poprawka, aby testy działały w Resharper, polegała po prostu na aktualizacji do najnowszej wersji Resharper (2019.2.1) w momencie pisania.

Boris
źródło
1

Miałem dokładnie ten sam problem i nic nie pomogło.

w końcu zauważyłem, że mam niezgodność w moich przestrzeniach nazw projektu jednostkowego i projektu testów jednostkowych.

Przestrzeń nazw mojego projektu jednostkowego to unit.project, a projekt testowy został nazwany unit.project.tests, ale domyślna przestrzeń nazw testu była taka sama jak jednostka, obie to unit.project.

Po zaktualizowaniu przestrzeni nazw, aby były inne (jedna przestrzeń nazw dla każdego projektu), wszystko działało!

srebro
źródło
Tak, miałem identyczny problem. Pomysł może polegać na tym, aby projekt testów i projekt docelowy były identyczne w celu ułatwienia dostępu, ale wkręca się w program uruchamiający testy i generuje ten problem z OP.
atconway,