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

J'ai un xUnit.net essai comme suit:

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

Le plugin xUnit pour VS 2012 dit:

Aucun test trouvé pour fonctionner.

TestDriven.net il fonctionne bien mais mentionne quelque chose à propos de Ad hoc :

1 passé, 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 quelques tests.)

Quoi donne?

62
demandé sur Ruben Bartelink 2013-04-25 16:23:30

8 réponses

TL;DR de vos Classes de Test doit soit public (mais vos Méthodes de Test peut ê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 runner (les tables de métadonnées MSIL n'indexent pas private(/internal) d'où une différence significative de performance dans l'efficacité relative que la réflexion peut ainsi atteindre).

à la suite de l' ci-dessus, 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 bien-xUnit par conception puisque 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 sont tous cohérents pour honorer cela (bien que sans doute ils [en particulier les deux derniers] pourraient faire plus pour marquer quand une classe de Test (c'est-à-dire classe [potentiellement indirectement] contenant Fact-annoations dérivées) est private).

La raison TestDriven.net exécute votre test est que L'auteur de TestDriven.net a mis beaucoup d'efforts pour le faire fonctionner. Il utilise en interne un wrapper/shim spécial Test Runner (appelé le Runner Adhoc) pour exécuter votre test. Sachez que la méthode n'est en fait pas exécutée via le xUnit.net runner et donc tous les attributs que vous mettez sur votre test qui ont des effets secondaires ne seront pas déclencher.

Notamment NUnit (et je suis sûr que MSTest) faites utiliser la réflexion privée [et donc ramasser des tests dans private classes] ce qui est probablement la raison pour laquelle il n'a jamais semblé une chose importante pour vous de vous inquiéter avant.

Note: un effet secondaire / truc activé par ceci est que vous pouvez faire une classe de Test {[1] } comme un moyen rapide de Skip ping tous les tests dans une classe de Test [et toutes les classes imbriquées]. (Malheureusement, les cas sur cette planète où cela est utilisé involontairement sont largement plus nombreux les cas intentionnels de ce bien!)

92
répondu Ruben Bartelink 2015-07-09 10:38:31

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

  1. Installez le xUnit.net runner pour Visual Studio 2013 (soyez prudent en exécutant Visual Studio en tant Qu'administrateur, ou les tests peuvent ne pas s'exécuter lors de l'exécution de L'IDE en tant que non-administrateur):

    A. depuis Visual Studio 2013, accédez à outils -> Extensions et mises à jour - > en ligne

    B. rechercher xUnit.net coureur pour Visual Studio 2012 et 2013

    C. Ensuite, téléchargez-le (installez-le). Si la mise à niveau vers VS 2013 à partir de VS 2012, il est suggéré que cela soit désinstallé, puis réinstallé.

    D. Redémarrez Visual Studio.

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

    A. Dans Visual Studio 2013, Naviguez: Resharper - > Gestionnaire D'Extensions.

    B. sur la gauche, sélectionnez en ligne.

    C. rechercher "xunit.net". sélectionnez le "xUnit.net essai Soutien". Cliquez Sur Installer.

    D. Redémarrez Visual Studio 2013.

  3. "Nettoyer" la solution

    A. Dans L'IDE, dans L'Explorateur de solutions, cliquez avec le bouton droit sur la solution et choisissez "nettoyer".

    B. recompiler.

    C. Maintenant, lorsque vous cliquez avec le bouton droit sur un attribut [Fact], sélectionnez "Exécuter des Tests unitaires" de Resharper (par opposition à la valeur par défaut "exécuter des Tests")

Dépannage en cours d'exécution avec XUnit:

  • Si des problèmes d'exécution du [fait] les tests avec XUnit persistent, il pourrait être nécessaire pour supprimer manuellement le package xUnit de tout / tous les dossiers suivants (passez en revue le contenu des dll xunit, puis supprimez dossier xUnit si trouvé):

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

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

  • Comme pour ReSharper, essayez de désinstaller et de réinstaller le bibliothèque xunitcontrib (xUnit.net Support de Test). J'ai remarqué une fois lors de la désinstallation, certains messages d'erreur clignotent passé. J'ai attrapé un capture d'écran à un point, et il listé:

    • 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 dans 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 de Visual Studio, puis exécutez Visual Studio en tant que non-administrateur et réinstallez-le via ReSharper (Resharper -> Extension Manager)

42
répondu CJBS 2014-01-16 19:17:23

À Partir 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, victime d'un cache de coureur corrompu à L'intérieur de Visual Studio. Pour effacer cette cache, arrêtez toutes les instances de Visual Studio, puis supprimez dossier % TEMP% \ VisualStudioTestExplorerExtensions. Assurez-vous également que votre le projet n'est lié qu'à une seule version de Visual Studio paquet NuGet coureur (xunit.coureur.visualstudio).

17
répondu Dan Friedman 2016-10-19 08:09:51

J'ai eu le même problème dans VS2017 RC, projet. net core 1.1. Mise à jour de xunit.runner a travaillé pour moi,

Install-Package xunit.runner.visualstudio
13
répondu Dhanuka777 2017-03-06 00:49:23

(comme mentionné par @Kyle dans les commentaires sur l'autre réponse) le même message No tests found to run peut résulter de L'utilisation de NuGet pour obtenir xUnit.dll et se retrouver avec la version 2.0.0 (qui est actuellement marquée comme avant-première comme certaines fonctionnalités de base comme la découverte de tests v1, etc. a pas encore été mis en œuvre dans cette branche).

La résolution dans ce cas, sélectionnez Stable Uniquement versions (par opposition à Inclure Préliminaire) dans le gestionnaire de package NuGet.

6
répondu RichardU 2013-11-26 11:40:47

Pour moi, la combinaison de mes noms de classe de test et de méthode de test était trop longue; xUnit semble avoir un certain plafond sur cette combinaison.

Raccourcir le nom de Juste la méthode de test a permis à xUnit de découvrir ce test unique. Le raccourcissement du nom de la classe entière a permis à xUnit de découvrir tous les tests de la classe.

Seuil de nom de classe + nom de méthode semble être 172 caractères.

4
répondu Sam 2016-08-09 15:05:51

Dans mon cas, pour voir les tests, j'ai dû effectuer les étapes suivantes:

(tous installés via le Gestionnaire de paquets NuGet)

  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
répondu Adrian Reid 2015-03-10 11:55:11

J'ai eu ce problème avec. net Core pendant un moment maintenant 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. passez au répertoire du projet.
  3. Construisez le projet en exécutant la commande suivante:

    dotnet build
    

NOTE: construire à partir de Visual Studio.NET ne fonctionnera pas! IMPORTANT!

  1. Exécutez les tests: Test --> Exécuter --> Tester Toutes les touches CTRL+R +Un (cela permettra de découvrir le nouveau test(s) - mais de ne pas exécuter le test(s).
  2. exécutez à nouveau les tests.
2
répondu mkaj 2016-12-07 19:10:25