Program Visual Studio 2013 nie wykrywa testów jednostkowych

146

Mam proste rozwiązanie w Visual Studio 2013, które składa się z jednego projektu internetowego, jednego projektu biblioteki i jednego projektu testu jednostkowego. Kiedy otwieram rozwiązanie i próbuję uruchomić testy jednostkowe, nie są one odkrywane przez Visual Studio. Aby uruchomić testy, staram się wejść do menu i wybrać Test -> Uruchom -> Uruchom wszystkie testy lub otwierając okno eksploratora testów. W ten sposób Visual Studio nie znajduje żadnych testów w rozwiązaniu.

Tworząc najpierw prosty projekt testów jednostkowych i próbując uruchomić test, Visual Studio wie, że odkryję test i mogę go uruchomić. Następnie, jeśli otworzę moje poprzednie rozwiązanie, Visual Studio odkryje teraz wszystkie testy. Próbuję zapisać swoje rozwiązanie, ale zamykając je i otwierając ponownie, bez tworzenia projektu testów jednostkowych, studio wizualne nie znajduje ponownie testów. To bardzo dziwne zachowanie, którego nie wiem, dlaczego tak się dzieje.

Kiedyś pracowałem sam w tym projekcie, w którym korzystałem z narzędzia kontroli źródła zintegrowanego z podstawą zespołu Visual Studio. Problem polegający na tym, że Visual Studio nie wykrywa testów jednostkowych zaczyna się, gdy do projektu pojawił się nowy element i kiedy muszę odtworzyć rozwiązanie za pomocą kontroli źródła online. Wcześniej wszystkie testy zawsze były odkrywane przez studio wizualne.

Do tworzenia testów jednostkowych używam biblioteki DLL Microsoft.VisualStudio.QualityTools.UnitTestFramework. Moja wersja programu Visual Studio to: Microsoft Visual Studio Express 2013 dla sieci Web w wersji 12.0.30723.00 Aktualizacja 3. Moja wersja .NET Framework to 4.5.50938.

Wszystkie moje testy wyglądają tak:

[TestClass] 
public class Service1Test 
{ 
    [TestMethod] 
    public void Test1() 
    {
        Assert.IsTrue(True); 
    } 
}
miguelbgouveia
źródło
2
Czy są to testy jednostkowe oparte na asynchronii?
Jamie Keeling
Nie jestem pewien, na czym polegał problem, ale praca jako administrator rozwiązała go za mnie.
Sriram Sakthivel
Wszystkie testy jednostkowe oparte na synchronizacji
miguelbgouveia
2
Czy wypróbowałeś zewnętrzny program uruchamiający testy (taki jak ReSharpers lub NCrunch)? Może twoja instalacja zawiera błędy (więc zainstaluj ponownie VS)
Carsten
1
Żadne z nich nie rozwiązało problemu dla mnie :( Co za katastrofa. Zrezygnowałem z NUnit i polegam na UnitTestFramework - dziwnie odwrotny problem z OP
Adam

Odpowiedzi:

210

Zauważyłem, że muszę od czasu do czasu zrobić, aby testy pokazały się prawidłowo.

  1. Jeśli twoje rozwiązanie znajduje się na chronionym dysku, do którego potrzebujesz dostępu administratora do odczytu / zapisu, czasami pojawia się tylko część testów. W takim przypadku zdecydowanie uruchom VS jako administrator.

  2. Jeśli Twoje rozwiązanie jest 64-bitowe, upewnij się, że Test> Ustawienia testowe> Domyślna architektura procesora jest ustawiona na x64. Czasami jest ustawiony na x86. Ustaw go na x64, a następnie odbuduj.

  3. Czasami po prostu ponowne uruchomienie programu Visual Studio załatwia sprawę, ponieważ eksplorator testów uruchomi się ponownie.

  4. Nie zapomnij o stworzeniu projektu / rozwiązania testowego. (Jeśli chcesz, aby został zbudowany z pozostałymi projektami, kliknij prawym przyciskiem myszy rozwiązanie> Właściwości> Właściwości konfiguracji> Konfiguracja> zaznacz pole „Kompiluj” dla projektu testowego)

  5. Upewnij się, że testy znajdują się w publicsekcji Twojej klasy testowej

AndyG
źródło
34
Zdaję sobie sprawę, że ta odpowiedź jest trochę spóźniona, ale moje wyszukiwanie w Google przywiodło mnie tutaj i nic, o czym wspomniano, nie rozwiązało mojego problemu. W końcu doszedłem do wniosku, że jest to nr 2 na mojej liście, więc chciałem zostawić tę wiedzę, a także inne sztuczki, które nauczyłem się z czasem.
AndyG
7
Połączenie # 2 i # 3 zrobiło to dla mnie. Program Visual Studio narzekał, że wiele (nie testowych) projektów w moim rozwiązaniu zostało wykluczonych z etapu wykrywania testów, ponieważ zostały one zbudowane dla architektury x86, ale to było w porządku.
Nate Barbettini,
4
Okazało się, że wszystkie moje ustawienia są poprawne, a ponowne uruchomienie nie działa. Rozwiązaniem problemu było po prostu zbudowanie rozwiązania. Wiem, że może się to wydawać głupie, ale nie jest oczywiste, że jest to konieczne; Nie widziałem żadnego z oficjalnych doktorów wspominających o tym kroku.
user1807768,
6
Miałem ten sam problem w VS2015. # 2 rozwiązał problem za mnie.
mcolegro
2
Nie mam pojęcia, dlaczego ludzie płacą tyle pieniędzy za produkt, który tak często zawodzi. Musiałem zaktualizować mój projekt do 2015 roku i 2 razy wykonać # 3, zanim odkrył mój test.
Matthew Hoggan,
81

Jeśli korzystasz z NUnit, najpierw pobierz NUnit Adapter.

Idź do Narzędzia → Rozszerzenia i aktualizacje… → Online → wyszukaj „NUnit Test Adapter”.

Farukh
źródło
2
Używam UnitTests firmy Microsoft. W tym przypadku przypuszczam, że nie trzeba niczego instalować.
miguelbgouveia
1
Zrobiło to dla mnie - bardzo zobowiązany.
Matas Vaitkevicius
To naprawiło to dla mnie. Dzięki.
jjthebig1
Głos za zgodą rozwiązał problem, ale czy konieczne jest posiadanie adaptera NUnit lub czy Visual Stdio współpracuje z NUnit po wyjęciu z pudełka.
Owain Glyndŵr
Jest pan bogiem.
Nox
61

Upewnij się, że klasa testowa jest publictaka, aby można ją było znaleźć. A jeśli odwołujesz się do innej klasy, upewnij się, że jest to samo.

Ponadto, czasami, jeśli nie masz żadnych potwierdzeń lub nie ozdabiasz testu znakiem [TestMethod], test może nie zostać rozpoznany.

Jeszcze 2 rzeczy: 1) Asynchroniczne testy jednostkowe działają w najlepszym przypadku zabawnie, aw najgorszym - żadnych. Spójrz na ten artykuł autorstwa Stephena Cleary'ego i zachować stamtąd jeśli Cię interesuje.

2) Jeśli używasz NUnit i napotkasz te same problemy, pamiętaj, że jest to [TestCase]dla Nunit, a nie[TestMethod]

Powiedziawszy powyższe, oto artykuł , który opublikowałem na temat projektu kodu, z oboma MSTest& NUnit, na wypadek, gdybyś chciał go podkręcić i upewnić się, że niczego nie brakuje.

Noctis
źródło
1
Wszystkie moje testy wyglądają tak: [TestClass] public class ServicesUtilsTest {[TestMethod] public void Test1 () {Assert.IsTrue (True); }}
miguelbgouveia
nie jest to zbyt jasne. Umieść to w bloku kodu w swoim pytaniu, aby było zrozumiałe :)
Noctis
Wszystkie moje testy dotyczą kodu synchronizacji i myślę, że mój problem nie tkwi w kodzie testów jednostkowych, ale bardziej w Visual Studio czasami nie odkrywa testów.
miguelbgouveia
Spróbuj użyć tego zamiast tego:using Microsoft.VisualStudio.TestTools.UnitTesting;
Noctis
1
Używam już Microsoft.VisualStudio.TestTools.UnitTesting. Ta przestrzeń nazw jest zdefiniowana w dll Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
miguelbgouveia
28

Miałem ten sam problem, ale żadne z innych rozwiązań nie działało. Okazuje się, że korzystałem z frameworka NUnit 3 z adapterem 2.

Jeśli używasz NUnit 3, przejdź do Rozszerzenia i aktualizacje i zainstaluj adapter testowy NUnit3.

Szczery
źródło
Mówi to w opisie pakietu Nuget. Ale jeśli jesteś podobny do mnie i nie czytasz, mam nadzieję, że to pomoże: „Ten pakiet zawiera zestaw struktury NUnit 3.0, do którego odwołują się twoje testy. Będziesz musiał zainstalować wersję 3.0 pakietu nunit- program konsolowy lub program uruchamiający innej firmy, który obsługuje NUnit 3.0 w celu wykonywania testów. Runners przeznaczone do użytku z NUnit 2.x nie będą poprawnie wykonywać testów 3.0. ”
Frank
W moim przypadku wiedziałem, że ma to coś wspólnego z aktualizacją NUnit3, ale jeden zestaw mojego testu przeszedł, a innych nie widziano. Po bliższym przyjrzeniu się było wiele wyjątków w wynikach, mimo że wszystkie testy przeszły pomyślnie.
Rich Shealer
Tak było w przypadku mnie. Uruchomiłem pakiet nuget „update-package”, nie zdając sobie sprawy, że został zaktualizowany z NUnit 2.x do 3.x.
Jens
Obecnie nie można znaleźć adaptera testowego NUnit 3.0 za pośrednictwem NuGet (zobacz witrynę Wiki NUnit 3.0 ). Jednak nadal można go zainstalować jako rozszerzenie.
vauhochzett
1
Wielkie dzięki, Frank. To rozwiązało mój problem. Teraz mogę zobaczyć wyniki testów jednostkowych w oknie konsoli :)
santosh kumar patro
12

Od czasu do czasu mam ten problem. U mnie działa zamknięcie programu Visual Studio i przejście do folderu:

%LocalAppData%\Microsoft\VisualStudio\12.0\ComponentModelCache

i usuń jego zawartość.

Po otwarciu programu Visual Studio i ponownym załadowaniu projektu Eksplorator testów powinien zawierać Twoje testy

Mariusz Gorzoch
źródło
Dla mnie to nie działa. Ostatnio używam programu Visual Studio 2013 Express z aktualizacją 5. Nadal nie pojawiają się żadne testy jednostkowe.
miguelbgouveia
To też był dla mnie pracownik. Nawet działał bez ponownego uruchamiania Visual Studio. Godzin w błocie wreszcie się skończyło.
Stephan Ryer
Ten katalog już nie istnieje w VS2017.
Noel Widmer
Dzięki, dla mnie działa, ponieważ każdy z tych folderów może mieć inną wersję w zależności od instalacji studia wizualnego, tak jak dla mnie jest%LocalAppData%\Microsoft\VisualStudio\16.0_03b7a93c\ComponentModelCache
Ravi Kumar Mistry
12

Użytkownicy XUnit mogą zauważyć, że okno Eksploratora testów nie wyświetla już żadnych testów. Aby umożliwić ponowne wykrycie testów, wypróbuj tę ważną wskazówkę , wyróżnioną poniżej.

Jeśli masz problemy z wykrywaniem lub uruchamianiem testów, możesz być ofiarą uszkodzonej pamięci podręcznej modułu uruchamiającego w programie Visual Studio. Aby wyczyścić tę pamięć podręczną, zamknij wszystkie wystąpienia programu Visual Studio, a następnie usuń folder% TEMP% \ VisualStudioTestExplorerExtensions. Upewnij się również, że projekt jest połączony tylko z jedną wersją pakietu NuGet programu Visual Studio runner (xunit.runner.visualstudio).

Wpisz TEMP, aby znaleźć folder docelowy

SushiGuy
źródło
To nie zadziałało dla mnie. Eksplorator testów po prostu nie znajduje mojego testu i o ile wiem, nie robię tego źle i próbowałem niektórych rozwiązań tutaj bez powodzenia.
Skychan
Korzystanie z MsTestV2 - to była jedyna rzecz, która rozwiązała problem
Nathan
5

Dla przyszłych pracowników Google miałem rzadki scenariusz, który to spowodował.

W mojej podstawowej klasie testowej miałem właściwość o nazwie TestContext. To kolidowało z zarezerwowaną właściwością TestContext MSTest, powodując, że wszystkie moje testy są ukryte przed VS / Resharper z wyjątkiem jednego (który nie dziedzicza z bazy).

Adam Behrle
źródło
1
mnie też! Zapomniałem utworzyć właściwość kontekstu testu public.
escape-llc
4

dla mnie była to zmiana „konfiguracji rozwiązania” na Debugowanie (zamiast Release).

zook2005
źródło
4

Mój problem polegał na tym, że moja metoda testu jednostkowego nie była nieważna i otrzymywała parametry.

alansiqueira27
źródło
Ze wszystkich rzeczy ... To był mój problem i trochę parametrów ma sens. W końcu, co system testowy wiedziałby o przekazaniu? Rozwiązaniem jest utworzenie metody testowej, w której ręcznie wywołujesz metodę, którą chcesz przetestować. Jeśli testujesz projekt WebAPI i masz Get with params, nadal musisz mieć pasujące wywołanie Get, ale nie pojawi się ono w eksploratorze.
MetalPhoenix
4

Zauważyłem, że metody testów jednostkowych oznaczone jako async voidnie są wykrywane przez VS Test Explorer. Wydaje się, że dzieje się tak, ponieważ VS nie miałby możliwości czekać na zakończenie testu i zdecydować, czy się powiódł, czy nie. Jeśli absolutnie potrzebujesz metody testowej do działania asynchronicznego, zamiast tego spraw, aby zwracała Task, na przykład async Task. Okazało się, że to rozwiązało problem.

Ciasteczkowy potwór
źródło
1
To nie odpowiada na powyższe pytanie, ale to jest dokładnie ten problem, który próbowałem rozwiązać. Więc miałeś wypadek +1 :) Dziękuję bardzo!
CF
3

Spróbuj skompilować wszystkie projekty jako MSIL (dowolny procesor) zamiast x86 / x64. Dziwnie mi zadziałało

Alfons
źródło
Po prostu musiałem zbudować projekt testowy przy użyciu dowolnego procesora, inne projekty pozostały x64
Eduardo Brites
1
Technicznie rzecz biorąc, C # / VB.NET zawsze kompiluje się do MSIL. Ustawienie projektu „x86”, „x64” lub „Dowolny procesor” (aw nowszych wersjach „Preferuj wersję 32-bitową”) to tylko flagi na górze pliku EXE / DLL. Jednak Point nadal stoi; NUnit nie wyświetla testów, których nie może załadować do silnika wykonawczego, ponieważ są one oznaczone jako wymagające określonej architektury do uruchomienia.
Jonathan Gilbert
3

Chociaż rozwiązanie AndyG działa, bardziej trwałym rozwiązaniem mogłoby być ustawienie zmiennej środowiskowej PreferredToolArchitecture na „x64”, albo przez:

Jak sprawić, by program Visual Studio używał natywnego łańcucha narzędzi amd64

lub przez:

  • Panel sterowania | System i bezpieczeństwo | System | Zaawansowane ustawienia systemu | Zmienne środowiskowe
  • PreferredToolArchitecture = x64
  • DefaultToolArchitecture = Native64Bit
  • PROCESSOR_ARCHITECTURE = x64
  • ProcessorArchitecture = x64
Kevin Johnsrude
źródło
2

Miałem ten sam problem i ponownie przypomniałem sobie (taka sytuacja miała miejsce wcześniej), że wybranie opcji „Platforma mieszana” w menu platformy rozwiązań działa, tak samo jak inne odpowiedzi.

Jeferson
źródło
Ale gdzie jest menu platformy rozwiązań? Czy to jest w programie Visual Studio? Używam Visual Studio Express 2013 dla sieci Web i nie mogę znaleźć tego menu.
miguelbgouveia
2

Udało mi się dodać moje jako

public static void TestMethod1(){}

zaczął działać, gdy usunąłem statyczne ...

Arthur Russell Fox
źródło
2

Przejdź do menedżera pakietów Nuget i pobierz adapter Nunit w następujący sposób. wprowadź opis obrazu tutaj

Debendra Dash
źródło
1

przejdź do menu projektu> Configuration Manager, sprawdź, czy platforma projektu testowego jest zgodna z resztą projektu i czy chcesz skompilować, a następnie odbudować.

user5224229
źródło
1
Nie mam żadnej opcji Configuration Manager w moim menu projektu. Mogę znaleźć tylko opcję właściwości projektu. Sama platforma projektu testów jednostkowych jest taka sama jak w przypadku innych projektów. Więc dla mnie to rozwiązanie nie działa.
miguelbgouveia
Zdefiniuj „pasuje do reszty projektu”
połącz
1

Po prostu wpadłem na to i nie widziałem podobnego przypadku, który byłby podobny do mojego.

W .csprojpliku mojego projektu testowego prywatność odniesienia NUnit została ustawiona na 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>

Po tym, jak się <Private>do Truetego zabrałem , zadziałało.

Kevin Giszewski
źródło
1

Wystarczy zainstalować tylko ten pakiet:

NUnit TestAdapter NUnit TestAdapter

Sandy_Vu
źródło
Wiem, że użycie innej struktury testów jednostkowych rozwiąże mój problem. Ale gdybym chciał kontynuować, użyj frameworka Microsoft Unit Tests, który nie jest rozwiązaniem.
miguelbgouveia
1

Miałem dokładnie ten sam problem.

Było to spowodowane niekompatybilną wersją NUnit, którą dodałem do mojego projektu (3.2.0) i zainstalowanym adapterem testowym (2.0.0).

Aby to naprawić, użyj opcji „Narzędzia> Rozszerzenia i aktualizacje” i wyszukaj NUnit3 Test Adapter, po czym wykrył moje testy.

Twoje zdrowie

Francis Smith
źródło
Nie używam NUnit.
miguelbgouveia
1

Powiedzmy tylko dla argumentacji, że musisz użyć architektury X64 w swoim projekcie testowym, aby zależności zostały poprawnie zbudowane (jak w moim przypadku). Może być konieczne zmodyfikowanie domyślnej architektury procesora w menu Test - Ustawienia testu . Ustawienie tego na X64 pozwoliło mojemu eksploratorowi testów znaleźć moje testy przy użyciu Microsoft.VisualStudio.TestTools.UnitTesting.

Dominic Hartjes
źródło
1

Przepraszam za dodanie do długiej listy, ale miałem zupełnie inny problem. Najpierw chciałbym wspomnieć, że odkryłem swój problem po kliknięciu przycisku „Uruchom wszystko” w Eksploratorze testów, a następnie obejrzeniu okna danych wyjściowych kompilacji w programie Visual Studio. Musisz go aktywnie obserwować, bo potem komunikat znika.

Jeśli chodzi o problem, wygląda na to, że podczas skanowania testów ładowana jest biblioteka DLL, a jej typy testów są wyliczane. Powoduje to załadowanie odwołań i jeśli podczas tego procesu wystąpi jakakolwiek awaria, testy nie zostaną pokazane w eksploratorze. Wystąpiły dwa problemy uniemożliwiające pomyślne załadowanie testowej biblioteki DLL:

  • W pliku konfiguracyjnym nadal pozostawało przekierowanie wiązania (przekierowanie do wersji niższej NHiberate niż ta, do której odwoływano się w projekcie testowym).
  • Sprzeczne odwołanie do zestawu (nie można załadować odwołań drugiego poziomu). AsmSpy to przy okazji świetne narzędzie do ich polowania.
Martijn Evens
źródło
Miałem do czynienia z tym samym problemem, miałem trudności ze znalezieniem, które
biblioteki
1

Jeśli załadujesz rozwiązanie Visual Studio (w moim przypadku VS 2015 Community) z udziału sieciowego lub katalogu Moje dokumenty, który jest częścią udziału , wpadniesz w ten problem. Rozwiązałem to, przenosząc rozwiązanie i związane z nim projekty do folderu lokalnego.

Ton Snoei
źródło
1

Po spędzeniu 2 dni ... żadna z powyższych nie zadziałała. Jedynym „rozwiązaniem” było: Przejdź do właściwości projektu -> zakładka Build. Następnie kliknij przycisk Zaawansowane w prawym dolnym rogu panelu. Zmień „Informacje debugowania:” na „pełne” i kliknij OK.

Oto zrzuty ekranu: wprowadź opis obrazu tutaj

wprowadź opis obrazu tutajwprowadź opis obrazu tutaj

ciekawyBoy
źródło
0

Natknąłem się na ten sam problem. Zbadano i stwierdzono, że biblioteki dll nie zostały skompilowane i umieszczone we właściwym folderze. jak tylko zmieniłem konfigurację, pojawiły się. - opcje budowania projektów, jakiego folderu należy użyć? - konfigurację budowania w menu budowania, należy je sprawdzić.

to naprawiło to dla mnie.

kfn
źródło
Dla mnie biblioteki dll do testów również nie zostały zbudowane, ponieważ Visual Studio nie znajduje żadnych zdefiniowanych testów. Używam programu Visual Studio Express i nie mam wpisu menu Build. Ale w moim menedżerze konfiguracji mam zaznaczone wszystkie opcje kompilacji. Więc myślę, że to nie jest problem w moim przypadku.
miguelbgouveia
@miguelbgouveia, jest odwrotnie - VS buduje biblioteki DLL, a następnie skanuje je w poszukiwaniu testów. Więc jeśli nie masz bibliotek DLL projektu testowego, na pewno nie znajdziesz żadnych testów.
0

For the Visual Studio 2013.5, clearing the \TestResults directory in the solution helped. Visual Studio corrupted the mdf file in which it stores the discovered tests, thus preventing the discovery of unit tests.

MartijnK
źródło
1
It's in the solution of your project. Right-click your project file in the Solution Explorer -> Open Folder in File Explorer. Go one directory up from there and delete the /TestResults directory. You may have to shut down Visual Studio to delete everything. It will rebuild the directory the next time the project is opened.
MartijnK
0

Be sure your all projects are runing with the same configuration. Under your project's Properties => Debug => Platform in drop down list choose the appropriate platform (for me it was "Any CPU") as determined at your other projects.

Roni
źródło
0
  • I know that the unit tests are not found if the solution is not built, so that is something to try (Build the solution), but that solution is like the help desk asking if your computer is plugged in...
  • After a clean rebuild did not fix the problem for me, running a full batch build did fix it.
amalgamate
źródło
0

Had the same issue; tests suddenly stopped being discovered.

Nunit Test Adapter had become disabled somehow. Clicking enable in the extension manager fixed it for me.

HeatherD
źródło
0

I had the same problem until I realized I made a cut/paste error and left off [Test Method] before the test.

forforf
źródło
That already happen to me. But in this they that is not the case.
miguelbgouveia