Dlaczego xUnit Runner nie znajduje moich testów

Mam xUnit.net badanie w następujący sposób:

static class MyTestClass
{
    [Fact]
    static void MyTestMethod() 
    {
    }
}

Wtyczka xUnit dla VS 2012 mówi:

Nie znaleziono żadnych testów.

TestDriven.net działa dobrze ale wspomina coś o Ad hoc :

1 przekazany, 0 nieudany, 0 pominięty( zobacz 'Lista zadań'), trwało 0.47 sekundy (Ad hoc)

TeamCity, xunit.gui.exe i xunit.console.exe oraz Visual Studio również nie mogą znaleźć TestMethod

(mam xunit.runner.visualstudio zainstalowane I VS ogląda kilka testów.)

Co daje?

Author: Ruben Bartelink, 2013-04-25

8 answers

TL; DR your Test Classes musi być public (ale twoje metody badań mogą być private i / lub static)


Ze względu na efektywność, autorzy xUnit zdecydowali się nie używać BindingFlags.NonPublic podczas wyszukiwania klas testowych w programie runner (tabele metadanych MSIL nie indeksują private(/internal) klasy w tym samym stopniu stąd istnieje znacząca różnica w wydajności względnej, którą można w ten sposób osiągnąć).

w wyniku powyżej fakt, że twoje class jest private oznacza, że nie zostanie odebrane.

Fakt, że metoda testowa to private i static jest w porządku-xUnit od wersji 1.0 wspiera oba te aspekty.

Zauważ, że Visual Studio xUnit Runner extension, xunit.console.exe (I GUI), xunit MSBuild task, Resharper i CodeRush są konsekwentne w honorowaniu tego (chociaż prawdopodobnie [zwłaszcza te dwa ostatnie] mogą zrobić więcej, aby oznaczyć klasę testową (tj. Klasa [potencjalnie pośrednio] zawierająca Fact-pochodne) to private).

Powód TestDriven.net prowadzi twój test jest to, że autor TestDriven.net włożył wiele wysiłku, aby to po prostu działało. Wewnętrznie używa specjalnej owijki/podkładki testowej (zwanej adhoc Runner) do przeprowadzenia testu. Należy pamiętać, że metoda ta w rzeczywistości nie jest uruchamiana poprzez xUnit.net biegacza i stąd wszelkie atrybuty, które umieścisz w swoim teście, które mają skutki uboczne, nie będą / align = "left" /

Zwłaszcza NUnit (i jestem prawie pewien MSTest) czy używać prywatnej refleksji [i stąd pick Up testów w klasach private i prawdopodobnie dlatego nigdy nie wydawało się ważne, aby martwić się wcześniej.

Uwaga: efektem ubocznym / trikiem włączonym przez to jest to, że możesz utworzyć klasę testową private jako szybki sposób Skippingowania wszystkich testów w klasie testowej [i dowolnych klas zagnieżdżonych]. (Niestety przypadki na tej planecie użycia tego nieumyślnie znacznie przewyższają zamierzone przypadki tego jednak!)

 92
Author: Ruben Bartelink,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-09 10:38:31

Ta odpowiedź dotyczy VS 2013, ale kroki są zasadniczo takie same dla VS 2012. Dotyczy to uruchomienia przez funkcji testu jednostkowego Resharp .

  1. Zainstaluj xUnit.net runner dla Visual Studio 2013 (należy uważać, uruchamiając Visual Studio jako Administrator, lub testy mogą nie działać podczas uruchamiania IDE jako nie-Administrator): {]}

    A. z poziomu Visual Studio 2013 przejdź do Narzędzia -> Rozszerzenia i aktualizacje - > Online

    B. Szukaj xUnit.net biegacz dla Visual Studio 2012 i 2013

    C. Następnie Pobierz (zainstaluj) go. W przypadku aktualizacji do VS 2013 Z VS 2012, sugeruje się, że należy to odinstalować, a następnie ponownie zainstalować.

    D. Uruchom Ponownie Visual Studio.
  2. Jeśli ReSharper jest zainstalowany, zainstaluj xUnit.net test runner plugin:

    A. W Visual Studio 2013 Nawigacja: Resharper - > Extension Manager.

    B. Po lewej stronie wybierz opcję Online.

    C. Szukaj "xunit.net". Wybierz "xUnit.net badanie Wsparcie". Kliknij Zainstaluj.

    D. Restart Visual Studio 2013.

  3. "Wyczyść" roztwór

    A. w IDE, w Eksploratorze rozwiązań, kliknij prawym przyciskiem myszy rozwiązanie i wybierz "Clean".

    B. Re-compile.

    Po kliknięciu prawym przyciskiem myszy atrybutu [Fact] wybierz opcję ReSharper " Uruchom testy jednostkowe "(w przeciwieństwie do domyślnego"Uruchom testy")

Rozwiązywanie problemów z uruchomieniem z XUnit:

  • Jeśli problemy z uruchomieniem [fakt] testy z XUnit utrzymują się, może konieczne jest ręczne usunięcie pakietu xUnit z dowolnego / wszystkich następujące foldery (przejrzyj zawartość bibliotek DLL xUnit, a następnie usuń xUnit folder if found):

    • C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\

    • C:\Users\<username>\AppData\Local\Microsoft\VisualStudio\12.0\Extensions\

  • Jeśli chodzi o ReSharper, spróbuj odłączyć i ponownie zainstalować biblioteka xunitcontrib (xUnit.net wsparcie testowe). Zauważyłam kiedyś po rozpakowaniu niektóre komunikaty o błędach migają obok. Złapałem screen-shot at jeden punkt, a wymienił:
    • dostęp do ścieżki C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\ReSharper\v8.1\plugins\xunit.dll odmawiam.
    • ... i to samo dla innych bibliotek DLL w tym katalogu
    Aby rozwiązać ten problem, usuń katalog C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\ Po odinstalowaniu z Visual Studio, a następnie uruchom Visual Studio jako nie-administrator i ponownie zainstaluj za pomocą ReSharper (Resharper -> Extension Manager)
 42
Author: CJBS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-16 19:17:23

Z http://xunit.github.io/docs/getting-started-desktop.html#run-tests-visualstudio :

Jeśli masz problemy z wykrywaniem lub uruchamianiem testów, możesz być ofiara uszkodzonej pamięci podręcznej biegacza w Visual Studio. Aby to wyczyścić pamięci podręcznej, wyłącz wszystkie instancje Visual Studio, a następnie usuń folder %TEMP % \VisualStudioTestExplorerExtensions. Również upewnij się, że Twój projekt jest powiązany tylko z jedną wersją Visual Studio pakiet runner NuGet (xunit.uciekinier.visualstudio).

 17
Author: Dan Friedman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-19 08:09:51

Miałem ten sam problem w projekcie VS2017 RC,. NET core 1.1. Aktualizacja xunit.runner pracował dla mnie,

Install-Package xunit.runner.visualstudio
 13
Author: Dhanuka777,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-06 00:49:23

(Jak wspomina @Kyle w komentarzach do drugiej odpowiedzi) ta sama wiadomość No tests found to run może wynikać z użycia NuGet do uzyskania xUnit.dll, a kończąc na wersji 2.0.0 (która jest obecnie oznaczona jako wersja wstępna jako niektóre podstawowe funkcje, takie jak odkrywanie testów v1 itp. nie został jeszcze wdrożony w tej branży).

Rozwiązaniem w tym przypadku jest wybranie stabilnych tylkowersji (w przeciwieństwie do Include Prerelease) w menedżerze pakietów NuGet.

 6
Author: RichardU,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-26 11:40:47

Dla mnie kombinacja moich klas testowych i nazw metod testowych była zbyt długa; xUnit wydaje się mieć pewne ograniczenia w tej kombinacji.

Skrócenie nazwy Tylko Metoda badania pozwoliła xUnit odkryć ten pojedynczy test. Skrócenie nazwy całej klasy pozwoliło xUnit odkryć wszystkie testy w klasie.

Próg nazwy klasy + nazwa metody wynosi 172 znaki.

 4
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-09 15:05:51

W moim przypadku, aby zobaczyć jakiekolwiek testy, musiałem wykonać następujące kroki:

(wszystkie zainstalowane przez NuGet Package Manager)

  1. Install xUnit v2. 0. 50727
  2. Install xUnit.extensions v2. 0. 50727
  3. przejdź do poniższego linku i wykonaj kroki opisane w dokumentacji: http://xunit.github.io/docs/running-tests-in-vs.html
Używam Visual Studio 2013 Premium. (Resharper nie zainstalowany)
 3
Author: Adrian Reid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-10 11:55:11

Od jakiegoś czasu mam problem z. Net Core, gdzie Klasa testowa lub metoda testowa nie są odkrywane. Dla mnie działa następująca poprawka:

  1. Otwórz okno wiersza polecenia.
  2. Zmiana katalogu projektu.
  3. Zbuduj projekt uruchamiając następujące polecenie:

    dotnet build
    

Uwaga: budowanie z Visual Studio.NET nie zadziała! Ważne!

  1. Uruchom testy: Test -- > Uruchom -- > Test All-CTRL + R +A (spowoduje to wykrycie nowego (- ych) testu (- ów) - ale nie uruchomi nowego (- ych) testu (- ów).
  2. Uruchom testy jeszcze raz.
 2
Author: mkaj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-07 19:10:25