web-dev-qa-db-fra.com

Pourquoi le xUnit Runner ne trouve-t-il pas mes tests?

J'ai un test xUnit.net comme suit:

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

Le plugin xUnit pour VS 2012 indique:

Aucun test trouvé à courir.

TestDriven.net fonctionne très bien mais mentionne quelque chose à propos de Ad hoc :

1 réussi, 0 échoué, 0 ignoré (voir 'Liste des tâches'), a pris 0,47 secondes (Ad hoc)

TeamCity, xunit.gui.exe et xunit.console.exe et Visual Studio ne peuvent pas non plus trouver TestMethod

(J'ai xunit.runner.visualstudio installé et VS voit des tests.)

Ce qui donne?

63
Ruben Bartelink

TL; DR vos classes de test doit être public (mais vos méthodes de test peuvent être private et/ou static)


Pour des raisons d'efficacité, les auteurs de xUnit ont choisi de ne pas utiliser BindingFlags.NonPublic lors de la recherche de classes de test dans le programme (les tables de métadonnées MSIL n'indexent pas les classes private (/ internal) au même degré, d'où une différence de performances significative efficacité relative que peut alors atteindre Reflection).

En raison de ce qui précède, le fait que votre class soit private signifie qu'il n'est pas ramassé.

Le fait que la méthode de test soit private et static est parfait - xUnit par sa conception depuis la version 1.0 a pris en charge ces deux aspects.

Notez que l'extension Visual Studio xUnit Runner, xunit.console.exe _ (et l’interface graphique), la tâche xunit MSBuild, Resharper et CodeRush respectent tous cette règle (bien qu’on puisse soutenir qu’ils [en particulier les deux derniers] pourraient faire plus pour signaler quand une classe de test (ie [potentiellement indirectement] contenant Fact- annoations dérivées) est private).

La raison pour laquelle TestDriven.net exécute votre test est que l'auteur de TestDriven.net a déployé de grands efforts pour le rendre Just Work. Il utilise en interne un wrapper/shim spécial Test Runner (appelé Adhoc Runner) pour exécuter votre test. Sachez que la méthode n'est en réalité pas exécutée via le programme d'exécution xUnit.net et que, par conséquent, les attributs que vous avez mis dans votre test et qui ont des effets secondaires ne seront pas déclenchés.

Notamment NUnit (et je suis presque sûr que MSTest) utilise des réflexions privées [et donc des tests dans private classes] qui C’est probablement la raison pour laquelle il ne vous a jamais semblé important de vous inquiéter auparavant.

Remarque: Un effet secondaire/astuce activé par ceci est que vous pouvez créer une classe de test private comme moyen rapide de Skippasser tous les tests d'une classe de test [et de toute classe imbriquée]. (Malheureusement, les cas d'utilisation non intentionnelle sur cette planète dépassent de loin les cas intentionnels!)

95
Ruben Bartelink

Cette réponse concerne VS 2013, mais les étapes sont essentiellement les mêmes pour VS 2012. Ceci s'applique à l'exécution via fonctionnalité de test unitaire de ReSharper .

  1. Installez le programme d'exécution xUnit.net pour Visual Studio 2013 (soyez prudent lorsque vous exécutez Visual Studio en tant qu'administrateur, sinon les tests risquent de ne pas s'exécuter lors de l'exécution de la commande IDE en tant que non-administrateur):

    une. Dans Visual Studio 2013, accédez à Outils -> Extensions et mises à jour -> En ligne.

    b. Rechercher un coureur xUnit.net pour Visual Studio 2012 et 2013

    c. Puis téléchargez-le (installez-le). Si vous effectuez une mise à niveau de VS 2012 vers VS 2013, il est conseillé de le désinstaller, puis de le réinstaller.

    ré. Redémarrez Visual Studio.

  2. Si ReSharper est installé, installez le plugin xUnit.net test runner:

    une. Dans Visual Studio 2013, naviguez: Resharper -> Extension Manager.

    b. Sur la gauche, sélectionnez En ligne.

    c. Recherchez "xunit.net". Sélectionnez le “Support de test xUnit.net”. Cliquez sur Installer.

    ré. Redémarrez Visual Studio 2013.

  3. "Nettoyer" la solution

    une. Dans l'EDI, dans l'Explorateur de solutions, cliquez avec le bouton droit de la souris sur la solution et choisissez "Nettoyer".

    b. Re-compiler.

    c. Maintenant, lorsque vous cliquez avec le bouton droit de la souris sur un attribut [Fact], Sélectionnez "Exécuter les tests unitaires" du resharper (par opposition à "Exécuter les tests" par défaut).

Dépannage sous XUnit:

  • Si les problèmes liés à l'exécution des tests [Fact] avec XUnit persistent, il peut être nécessaire de supprimer manuellement le package xUnit de tout/de tous les dossiers suivants (examinez le contenu des DLL xunit, puis supprimez le dossier xUnit, le cas échéant):

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

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

  • Pour ce qui est de ReSharper, essayez de désinstaller et de réinstaller la bibliothèque xunitcontrib (xUnit.net Test Support). J'ai remarqué une fois, lors de la désinstallation, des messages d'erreur qui clignotaient. J'ai attrapé une capture d'écran à un moment donné et elle indiquait:

    • L'accès au chemin C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\ReSharper\v8.1\plugins\xunit.dll Est refusé.
    • ... et la même chose pour les autres DLL de ce répertoire

    Pour résoudre ce problème, supprimez le répertoire C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\ Après la désinstallation à partir de Visual Studio, puis exécutez Visual Studio en tant que non-administrateur et réinstallez-le via ReSharper (Resharper -> Extension Manager).

43
CJBS

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

Si vous rencontrez des problèmes pour découvrir ou exécuter des tests, vous pouvez être victime d'un cache de coureur corrompu dans Visual Studio. Pour effacer ce cache, fermez toutes les instances de Visual Studio, puis supprimez le dossier% TEMP%\VisualStudioTestExplorerExtensions. Assurez-vous également que votre projet est lié uniquement à une version unique du package NuGet de Visual Studio Runner (xunit.runner.visualstudio).

18
Dan Friedman

J'ai eu le même problème dans VS2017 RC, projet .NET core 1.1. La mise à jour de xunit.runner a fonctionné pour moi,

Install-Package xunit.runner.visualstudio
13
Dhanuka777

(Comme mentionné par @Kyle dans les commentaires sur la réponse précédente) Le même No tests found to run message peut résulter de l’utilisation de NuGet pour obtenir xUnit.dll et de la version 2.0.0 (qui est actuellement marquée en tant que version préliminaire, certaines fonctionnalités essentielles telles que la découverte de tests v1, etc. n’ayant pas encore été implémentées dans cette branche).

La solution dans ce cas est de sélectionner Stable Only versions (par opposition à Include Prerelease) dans le gestionnaire de paquets NuGet.

6
RichardU

Pour moi, la combinaison de ma classe de test et des noms de méthode de test était trop longue; xUnit semble avoir une certaine limite sur cette combinaison.

Raccourcir le nom de just la méthode de test a permis à xUnit de découvrir ce test unique. Raccourcir le nom de l'ensemble classe a permis à xUnit de découvrir tous les tests de la classe.

Le seuil du nom de classe + nom de la méthode semble être de 172 caractères.

4
StoriKnow

Dans mon cas, pour voir les tests, je devais suivre les étapes suivantes:

(Tous installés via NuGet Package Manager)

  1. Installer xUnit v2.0.50727
  2. Installer xUnit.extensions v2.0.50727
  3. Accédez au lien suivant et suivez les étapes décrites dans la documentation: http://xunit.github.io/docs/running-tests-in-vs.html

J'utilise Visual Studio 2013 Premium. (Resharper NON installé)

3
Adrian Reid

Je rencontre ce problème avec .NET Core depuis un moment déjà où une classe de test ou une méthode de test n’est pas découverte. Le correctif suivant fonctionne pour moi:

  1. Ouvrez une fenêtre d'invite de commande.
  2. Accédez au répertoire du projet.
  3. Construisez le projet en exécutant la commande suivante:

    dotnet build
    

REMARQUE: la construction à partir de Visual Studio.NET ne fonctionnera pas! <<<<<<<<<<< IMPORTANT!

  1. Exécutez les tests: Test -> Exécuter -> Tout tester - CTRL + R + A (le nouveau (s) test (s) sera découvert), mais pas le (s) nouveau (s) test (s).
  2. Exécutez les tests à nouveau.
3
mkaj