Waarom vindt de xUnit Runner mijn tests niet

Ik heb een xUnit.net-test als volgt:

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

De xUnit-plug-in voor VS 2012 zegt:

Geen tests gevonden om uit te voeren.

TestDriven.net voert het prima uit maar vermeldt iets over ad hoc:

1 geslaagd, 0 mislukt, 0 overgeslagen (zie ‘Takenlijst’), duurde 0,47 seconden (ad hoc)

TeamCity, xunit.gui.exeen xunit.console.exeen Visual Studio kunnen TestMethod

ook niet vinden

(Ik heb xunit.runner.visualstudiogeïnstalleerd en VS ziet enkele tests.)

Wat geeft?


Antwoord 1, autoriteit 100%

TL;DR uw testklassen moetenpubliczijn (maar uw testmethoden kunnen privateen/ of static)


Om redenen van efficiëntie hebben de auteurs van xUnit ervoor gekozen om BindingFlags.NonPublicniet te gebruiken bij het zoeken naar testklassen in de runner (de MSIL-metadatatabellen indexeren private(/internal) klassen in dezelfde mate, vandaar dat er een significant prestatieverschil is in de relatieve efficiëntie die Reflection kan bereiken).

Als gevolg van het bovenstaande betekent het feit dat uw classprivateis, dat deze niet wordt opgehaald.

Het feit dat de testmethode privateen staticis, is prima – xUnit by design sinds 1.0 heeft beide aspecten ondersteund.

Merk op dat de Visual Studio xUnit Runner-extensie, xunit.console.exe(en de GUI), de xunitMSBuild-taak, Resharper en CodeRush allemaal consistent zijn in het respecteren dit (hoewel ze [vooral de laatste twee] aantoonbaar meer zouden kunnen doen om te markeren wanneer een testklasse (dwz klasse [mogelijk indirect] die Fact-afgeleide annoties bevat) privateis) .

De reden waarom TestDriven.net uw test uitvoert, is dat de auteur van TestDriven.net veel moeite heeft gedaan om het gewoon te laten werken. Het gebruikt intern een speciale Test Runner-wrapper/shim (de Adhoc Runner genoemd) om uw test uit te voeren. Houd er rekening mee dat de methode eigenlijk niet wordt uitgevoerd via de xUnit.net-runner en dat daarom alle attributen die u op uw test zet die bijwerkingen hebben, niet worden geactiveerd.

Met name NUnit (en ik ben er vrij zeker van dat MSTest) gebruiktprivéreflectie [en haalt daarom tests op in privatelessen], wat waarschijnlijk de reden is waarom het nooit een belangrijk om je eerst zorgen over te maken.

Opmerking: een neveneffect / truc die hierdoor mogelijk wordt gemaakt, is dat u een testklasse privatekunt maken als een snelle manier om alle tests in een testklasse te Skippingen [ en alle geneste klassen]. (Helaas zijn de gevallen op deze planeet waarin dit onbedoeld wordt gebruikt, veel groter dan de opzettelijke gevallen hiervan!)


Antwoord 2, autoriteit 43%

Dit antwoord is voor VS 2013, maar de stappen zijn in wezen hetzelfde voor VS 2012. Dit geldt voor het uitvoeren via ReSharper’s unit test functionaliteit.

  1. Installeer de xUnit.net runner voor Visual Studio 2013 (wees voorzichtig bij het uitvoeren van Visual Studio als beheerder, anders worden de tests mogelijk niet uitgevoerd wanneer de IDE wordt uitgevoerd als niet-beheerder):

    a. Ga vanuit Visual Studio 2013 naar Tools -> Uitbreidingen en updates -> Online

    b. Zoek naar xUnit.net runner voor Visual Studio 2012 en 2013

    c. Download (installeer) het dan. Als u een upgrade uitvoert naar VS 2013 vanuit VS 2012, wordt aangeraden dit te verwijderen en vervolgens opnieuw te installeren.

    d. Start Visual Studio opnieuw.

  2. Als ReSharper is geïnstalleerd, installeer dan de xUnit.net testrunner-plug-in :

    (Opmerking: sinds resharper 2016.1, Xunit-ondersteuning is ingebouwd in resharper , wat betekent dat de XUNIT-plug-in niet langer nodig is.)

    a. Navigeer in Visual Studio 2013: Resharper – & GT; Extension Manager.

    b. Selecteer aan de linkerkant online.

    c. Zoek naar “xunit.net”. Selecteer de “Xunit.net-testondersteuning”. Klik op Installeren.

    d. Start Visual Studio 2013 opnieuw.

  3. “Reinig” de oplossing

    a. Klik in de IDE, in Solution Explorer, klik met de rechtermuisknop op de oplossing en kies “Reinig”.

    b. Opnieuw compileren.

    c. Nu, wanneer u met de rechtermuisknop op een [Fact]ATTIBUT] klikt, selecteert u Resharper’s “Run Unit-tests” (in tegenstelling tot de standaard “Run Tests”)

Problemen oplossen met XUNIT:

  • Als problemen met de [FACT] -tests met XUNIT blijven bestaan, kan dit
    nodig zijn om het xunit-pakket handmatig te verwijderen van elke / al het
    volgende mappen (Review Content voor de XUNIT DLLS, DAN DAN
    XUNIT-map indien gevonden):

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

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

  • Probeer opnieuw opnieuw te installeren en opnieuw te installeren en opnieuw te installeren
    xunitcontrib-bibliotheek (XUNIT.net-testondersteuning). Ik heb een keer opgemerkt
    Wanneer het niet installeren, knipperen enkele foutmeldingen voorbij. Ik greep een
    Screen-shot op één punt en het vermeldt:

    • Toegang tot het pad
      C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\ReSharper\v8.1\plugins\xunit.dll
      wordt geweigerd.
    • … en hetzelfde voor de andere DLL’s in die directory

Verwijder dit om dit op te lossen, de C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\map na het verwijderen van visuele studio , voer vervolgens Visual Studio uit als niet-beheerder en installeer het opnieuw installeren via Resharper (Resharper – & GT; Extension Manager)


Antwoord 3, Autoriteit 18%

van http://xunit.github.io/docs/getting- Begonnen-Desktop.html # Run-Tests-VisualStudio :

Als u problemen hebt met het ontdekken of uitvoeren van tests, kunt u een
slachtoffer van een beschadigde runner-cache binnen visuele studio. Om dit te wissen
Cache, sluit alle gevallen van visuele studio af en verwijder vervolgens de
Map% Temp% \ VisualstudiotestExplorereXteSions. Zorg er ook voor dat je
Project is alleen gekoppeld aan een enkele versie van de Visual Studio
Runner Nuget-pakket (xunit.runner.visualstudio).


Antwoord 4, Autoriteit 14%

Ik had hetzelfde probleem in VS2017 RC, .NET Core 1.1-project. Xunit.Runner bijwerken werkte voor mij,

Install-Package xunit.runner.visualstudio

Antwoord 5, Autoriteit 6%

(Zoals bedoeld door @Kyle in de opmerkingen over het andere antwoord) dezelfde No tests found to run-bericht te laten uitvoeren, kan het gevolg zijn van het gebruik van Nuget om Xunit.dll te krijgen en met versie 2.0 te eindigen. 0 (die momenteel is gemarkeerd als prerelease als een kernfunctionaliteit zoals het ontdekken van V1-tests enz. In die tak moet worden geïmplementeerd).

De resolutie in dit geval is om alleen stabiel versies te selecteren (in tegenstelling tot inclusief Prerelective ) in de Nuget Package Manager.


Antwoord 6, Autoriteit 4%

In mijn geval, om tests te zien, moest ik de volgende stappen invullen:

(Alle geïnstalleerd via Nuget Package Manager)

  1. Installeer xUnitV2.0.50727
  2. installeren xUnit.extensionsv2.0.50727
  3. Navigeer naar de volgende link en volg de stappen die in de documentatie worden geschetst: http://xunit.github.io/docs/Running-tests-in-vs.html

Ik gebruik Visual Studio 2013 Premium. (Resharper niet geïnstalleerd)


Antwoord 7, Autoriteit 4%

Voor mij was de combinatie van de namen van mijn testklasse en testmethode te lang; xUnit lijkt een limiet te hebben voor deze combinatie.

Door de naam van alleende testmethode in te korten, kon xUnit die ene test ontdekken. Door de naam van de hele klassein te korten, kon xUnit alle tests in de klas ontdekken.

Drempel van klassenaam + methodenaam lijkt 172 tekens te zijn.


Antwoord 8, autoriteit 4%

Ik heb al een tijdje dit probleem met .NET Core waarbij een testklasse of een testmethode niet wordt ontdekt. De volgende oplossing werkt voor mij:

  1. Open een opdrachtpromptvenster.
  2. Verander naar de projectmap.
  3. Bouw het project met de volgende opdracht:

    dotnet build
    

OPMERKING: bouwen vanuit Visual Studio.NET werkt niet! <<<<<<<<<<< BELANGRIJK!

  1. Voer de tests uit: Test –> Uitvoeren –> Alles testen – CTRL+R +A (hiermee worden de nieuwe test(s) ontdekt – maar niet de nieuwe test(s).
  2. Voer de tests opnieuw uit.

Other episodes