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?
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 Skip
passer 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!)
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 .
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.
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.
"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:
C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\ReSharper\v8.1\plugins\xunit.dll
Est refusé.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).
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).
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
(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.
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.
Dans mon cas, pour voir les tests, je devais suivre les étapes suivantes:
(Tous installés via NuGet Package Manager)
xUnit
v2.0.50727xUnit.extensions
v2.0.50727J'utilise Visual Studio 2013 Premium. (Resharper NON installé)
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:
Construisez le projet en exécutant la commande suivante:
dotnet build
REMARQUE: la construction à partir de Visual Studio.NET ne fonctionnera pas! <<<<<<<<<<< IMPORTANT!