it-swarm.com.de

Warum findet der xUnit Runner meine Tests nicht?

Ich habe einen xUnit.net-Test wie folgt:

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

Das xUnit Plugin für VS 2012 sagt:

Es wurden keine Tests zum Ausführen gefunden.

TestDriven.net läuft gut erwähnt aber etwas über Ad-hoc :

1 bestanden, 0 nicht bestanden, 0 übersprungen (siehe 'Aufgabenliste'), dauerte 0,47 Sekunden (Ad hoc)

TeamCity, xunit.gui.exe und xunit.console.exe und Visual Studio können auch TestMethod nicht finden

(Ich habe xunit.runner.visualstudio installiert und VS sieht einige Tests.)

Was gibt?

63
Ruben Bartelink

TL; DR Ihre Testklassen müssen public sein (aber Ihre Testmethoden können es sein private und/oder static)


Aus Gründen der Effizienz haben die Autoren von xUnit entschieden, BindingFlags.NonPublic Bei der Suche nach Testklassen im Runner nicht zu verwenden (die MSIL-Metadatentabellen indizieren keine Klassen private (/ internal) In gleichem Maße besteht daher ein signifikanter Leistungsunterschied in der relativen Effizienz, die Reflection auf diese Weise erzielen kann.

Infolge des oben Gesagten bedeutet die Tatsache, dass Ihr classprivate ist, dass es nicht aufgenommen wird.

Die Tatsache, dass die Testmethode private und static ist, ist in Ordnung - xUnit ist so konzipiert, dass 1.0 beide Aspekte unterstützt.

Beachten Sie, dass die Visual Studio xUnit Runner-Erweiterung xunit.console.exe (Und die GUI), die MSBuild-Task xunit, Resharper und CodeRush dies konsequent berücksichtigen (obwohl dies möglicherweise der Fall ist [insbesondere die beiden letzteren] tun Sie mehr, um zu kennzeichnen, wenn eine Testklasse (dh eine Klasse, die [möglicherweise indirekt] Fact- abgeleitete Anmerkungen enthält) private ist).

Der Grund, warum TestDriven.net Ihren Test durchführt, besteht darin, dass der Autor von TestDriven.net große Anstrengungen unternommen hat, um Just Work zu erstellen. Intern wird ein spezieller Test Runner Wrapper/Shim (Adhoc Runner) verwendet, um den Test auszuführen. Beachten Sie, dass die Methode tatsächlich nicht über den xUnit.net-Runner ausgeführt wird und daher alle Attribute, die Sie Ihrem Test hinzufügen und die Nebenwirkungen haben, nicht ausgelöst werden.

Insbesondere NUnit (und ich bin mir ziemlich sicher, dass MSTest) verwendet private Reflektion [und nimmt daher Tests in private Klassen auf], was wahrscheinlich ist warum es dir nie wichtig erschien, dir vorher Sorgen zu machen.

Hinweis: Ein Nebeneffekt/Trick, der hierdurch aktiviert wird, besteht darin, dass Sie eine Testklasse private erstellen können, um Skip alle Tests in einer Testklasse [und allen verschachtelten Klassen] zu pingen. (Leider überwiegen die Fälle auf diesem Planeten, in denen dies unbeabsichtigt verwendet wurde, bei weitem die absichtlichen Fälle!)

95
Ruben Bartelink

Diese Antwort gilt für VS 2013, die Schritte für VS 2012 sind jedoch im Wesentlichen gleich. Dies gilt für die Ausführung über ReSharpers Unit-Test-Funktionalität .

  1. Installieren Sie den xUnit.net-Runner für Visual Studio 2013 (seien Sie vorsichtig, wenn Sie Visual Studio als Administrator ausführen. Andernfalls werden die Tests möglicherweise nicht ausgeführt, wenn Sie IDE als Nicht-Administrator) ausführen):

    ein. Wechseln Sie in Visual Studio 2013 zu Extras -> Erweiterungen und Updates -> Online

    b. Suchen Sie nach xUnit.net-Runner für Visual Studio 2012 und 2013

    c. Dann laden Sie es herunter (installieren Sie es). Wenn Sie ein Upgrade von VS 2012 auf VS 2013 durchführen, wird empfohlen, dieses zu deinstallieren und anschließend erneut zu installieren.

    d. Starten Sie Visual Studio neu.

  2. Wenn ReSharper installiert ist, installieren Sie das xUnit.net-Test-Runner-Plugin:

    ein. Navigieren Sie in Visual Studio 2013 zu Resharper -> Extension Manager.

    b. Wählen Sie links Online aus.

    c. Suchen Sie nach „xunit.net“. Wählen Sie den "xUnit.net Test Support". Klicken Sie auf Installieren.

    d. Starten Sie Visual Studio 2013 neu.

  3. Die Lösung „reinigen“

    ein. Klicken Sie in der IDE im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe und wählen Sie "Bereinigen".

    b. Neu kompilieren.

    c. Wenn Sie nun mit der rechten Maustaste auf ein Attribut [Fact] Klicken, wählen Sie Resharper "Run Unit Tests" (im Gegensatz zu den Standardeinstellungen für "Run Tests").

Fehlerbehebung beim Ausführen mit XUnit:

  • Wenn weiterhin Probleme beim Ausführen der [Fact] -Tests mit XUnit auftreten, muss das xUnit-Paket möglicherweise manuell aus einem der folgenden Ordner entfernt werden (überprüfen Sie den Inhalt der xunit-DLLs und löschen Sie den xUnit-Ordner, falls vorhanden):

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

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

  • Versuchen Sie für ReSharper, die xunitcontrib-Bibliothek zu deinstallieren und erneut zu installieren (xUnit.net Test Support). Ich habe einmal bei der Deinstallation bemerkt, dass einige Fehlermeldungen vorbei blinken. Ich habe an einer Stelle einen Screenshot aufgenommen, in dem Folgendes aufgeführt ist:

    • Der Zugriff auf den Pfad C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\ReSharper\v8.1\plugins\xunit.dll Wird verweigert.
    • ... und das Gleiche für die anderen DLLs in diesem Verzeichnis

    Um dies zu beheben, löschen Sie das Verzeichnis C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\ Nach der Deinstallation in Visual Studio, führen Sie Visual Studio als Nicht-Administrator aus und installieren Sie es erneut über ReSharper (Resharper -> Extension Manager).

43
CJBS

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

Wenn Sie Probleme beim Erkennen oder Ausführen von Tests haben, sind Sie möglicherweise Opfer eines beschädigten Runner-Caches in Visual Studio. Fahren Sie alle Instanzen von Visual Studio herunter, und löschen Sie den Ordner% TEMP%\VisualStudioTestExplorerExtensions, um diesen Cache zu löschen. Stellen Sie außerdem sicher, dass Ihr Projekt nur mit einer einzigen Version des Visual Studio-Runner-NuGet-Pakets (xunit.runner.visualstudio) verknüpft ist.

18
Dan Friedman

Ich hatte das gleiche Problem in VS2017 RC, .NET Core 1.1-Projekt. Die Aktualisierung von xunit.runner hat bei mir funktioniert.

Install-Package xunit.runner.visualstudio
13
Dhanuka777

(Wie von @Kyle in den Kommentaren zur anderen Antwort erwähnt) Dasselbe No tests found to run message kann sich aus der Verwendung von NuGet ergeben, um xUnit.dll zu erhalten, und endet mit Version 2.0.0 (die derzeit als Vorabversion markiert ist, da einige Kernfunktionen wie das Erkennen von v1-Tests usw. in diesem Zweig noch implementiert werden müssen).

In diesem Fall müssen Sie im NuGet-Paketmanager Nur stabil Versionen (im Gegensatz zu Vorabversion einschließen) auswählen.

6
RichardU

Für mich war die Kombination meiner Testklassen- und Testmethoden-Namen zu lang. xUnit scheint eine Obergrenze für diese Kombination zu haben.

Durch das Kürzen des Namens nur der Testmethode konnte xUnit diesen einzelnen Test ermitteln. Durch Kürzen des Namens der gesamten Klasse konnte xUnit alle Tests in der Klasse ermitteln.

Der Schwellenwert für Klassenname + Methodenname scheint 172 Zeichen zu betragen.

4
StoriKnow

In meinem Fall musste ich die folgenden Schritte ausführen, um Tests zu sehen:

(Alle über NuGet Package Manager installiert)

  1. Installieren Sie xUnit v2.0.50727
  2. Installieren xUnit.extensions v2.0.50727
  3. Navigieren Sie zu folgendem Link und befolgen Sie die in der Dokumentation beschriebenen Schritte: http://xunit.github.io/docs/running-tests-in-vs.html

Ich verwende Visual Studio 2013 Premium. (Resharper NICHT installiert)

3
Adrian Reid

Ich habe dieses Problem bereits seit einiger Zeit mit .NET Core, wo eine Testklasse oder eine Testmethode nicht erkannt wird. Das folgende Update funktioniert für mich:

  1. Öffnen Sie ein Eingabeaufforderungsfenster.
  2. Wechseln Sie in das Projektverzeichnis.
  3. Erstellen Sie das Projekt mit dem folgenden Befehl:

    dotnet build
    

HINWEIS: Das Erstellen von Visual Studio.NET funktioniert nicht! <<<<<<<<<<< WICHTIG!

  1. Führen Sie die Tests aus: Test -> Ausführen -> Alle testen - STRG + R + A (dabei werden die neuen Tests ermittelt, die neuen Tests werden jedoch nicht ausgeführt.
  2. Führen Sie die Tests erneut aus.
3
mkaj