Visual Studio 2013 ne découvre pas les tests unitaires

146

J'ai une solution simple dans Visual Studio 2013 qui est composée d'un projet Web, d'un projet de bibliothèque et d'un projet de test unitaire. Lorsque j'ouvre la solution et que j'essaye d'exécuter les tests unitaires, ils ne sont pas découverts par Visual Studio. Pour exécuter les tests, j'essaye d'aller dans le menu et de choisir Test -> Exécuter -> Exécuter tous les tests ou en ouvrant la fenêtre de l'explorateur de tests. Par ces méthodes, Visual Studio ne découvre aucun test dans la solution.

En créant d'abord un simple projet de tests unitaires et en essayant d'exécuter le test, Visual Studio sait découvrir le test et je peux l'exécuter. Ensuite, si j'ouvre ma précédente solution, Visual Studio découvre maintenant tous les tests. J'essaye de sauvegarder ma solution mais en la fermant et en la rouvrant, sans créer d'abord un projet de test unitaire, le studio visuel ne retrouve pas les tests. C'est un comportement très étrange dont je ne sais pas pourquoi cela se produit.

J'avais l'habitude de travailler seul dans ce projet qui utilisait le contrôle de source git intégré à la fondation de l'équipe de Visual Studio. Le problème de Visual Studio de ne pas découvrir les tests unitaires commencent quand un nouvel élément est arrivé au projet et quand j'ai besoin de recréer la solution via le contrôle de code source en ligne. Avant cela, tous les tests étaient toujours découverts par Visual Studio.

Pour créer les tests unitaires, j'utilise la dll Microsoft.VisualStudio.QualityTools.UnitTestFramework. Ma version de Visual Studio est: Microsoft Visual Studio Express 2013 pour la version Web 12.0.30723.00 Update 3. Ma version de .net framework est 4.5.50938.

Tous mes tests sont comme ceci:

[TestClass] 
public class Service1Test 
{ 
    [TestMethod] 
    public void Test1() 
    {
        Assert.IsTrue(True); 
    } 
}
miguelbgouveia
la source
2
S'agit-il de tests unitaires basés sur Async?
Jamie Keeling
Je ne sais pas quel était le problème, mais mon exécution en tant qu'administrateur a résolu le problème pour moi.
Sriram Sakthivel
Tous les tests unitaires basés sur la synchronisation
miguelbgouveia
2
Avez-vous essayé un testeur externe (comme ReSharpers ou NCrunch)? Peut-être que votre installation est buggée (alors réinstallez VS)
Carsten
1
Aucun de ceux-ci n'a résolu le problème pour moi: (Quel désastre. J'ai abandonné NUnit et je compte sur UnitTestFramework - bizarrement le problème opposé à l'OP
Adam

Réponses:

210

Certaines choses que j'ai remarquées que je dois faire de temps en temps pour que les tests apparaissent correctement.

  1. Si votre solution se trouve dans un lecteur protégé pour lequel vous avez besoin d'un accès administrateur pour lire / écrire, parfois seule une partie des tests se produit. Exécutez définitivement VS en tant qu'administrateur dans ce cas.

  2. Si votre solution est 64 bits, assurez-vous que Test> Paramètres de test> Architecture de processeur par défaut est défini sur x64. Parfois, il est défini sur x86. Réglez-le sur x64, puis reconstruisez.

  3. Parfois, le simple fait de redémarrer Visual Studio fait l'affaire car l'explorateur de tests redémarrera.

  4. N'oubliez pas de créer le projet / la solution de test. (Si vous souhaitez qu'il soit construit avec le reste des projets, faites un clic droit sur votre solution> Propriétés> Propriétés de configuration> Configuration> cochez la case "Construire" pour votre projet de test)

  5. Assurez-vous que les tests sont dans une publicsection de votre classe de test

AndyG
la source
34
Je me rends compte que cette réponse est un peu tardive, mais ma recherche Google m'a amené ici, et rien de mentionné n'a résolu mon problème. Finalement, j'ai compris que c'était le n ° 2 de ma liste, alors je voulais laisser cette connaissance, ainsi que les autres astuces que j'ai apprises au fil du temps.
AndyG
7
Une combinaison de # 2 et # 3 l'a fait pour moi. Visual Studio s'est plaint qu'un certain nombre de projets (non-test) de ma solution ont été exclus de l'étape de découverte de test car ils ont été construits pour x86, mais c'était bien.
Nate Barbettini
4
J'ai trouvé que mes paramètres étaient tous corrects et que le redémarrage ne fonctionnait pas. Ce qui a résolu le problème pour moi a simplement été de créer la solution. Je sais que cela peut sembler stupide, mais ce n'est pas évident que ce soit nécessaire; Je n'ai vu aucun des documents officiels mentionner cette étape.
user1807768
6
J'ai eu le même problème dans VS2015. # 2 a résolu le problème pour moi.
mcolegro
2
Je ne sais pas pourquoi les gens paient autant d'argent pour un produit qui échoue si souvent. J'ai dû mettre à niveau mon projet en 2015 et faire le # 3 2 fois avant qu'il ne découvre mon test.
Matthew Hoggan
81

Si vous utilisez NUnit, assurez-vous de télécharger d'abord l'adaptateur NUnit.

Allez dans Outils → Extensions et mises à jour… → En ligne → recherchez "NUnit Test Adapter".

Farukh
la source
2
J'utilise UnitTests de Microsoft. Dans ce cas, je suppose que ce n'est pas nécessaire d'installer quoi que ce soit.
miguelbgouveia
1
Cela l'a fait pour moi - très obligé.
Matas Vaitkevicius
Cela a résolu le problème pour moi. Merci.
jjthebig1
Le vote positif a permis de résoudre le problème, mais est-il nécessaire d'avoir un adaptateur NUnit ou Visual Stdio doit-il fonctionner avec NUnit prêt à l'emploi?
Owain Glyndŵr
Vous êtes un dieu monsieur.
Nox
61

Assurez-vous que votre classe de test est publicpour qu'elle puisse être trouvée. Et si vous faites référence à une autre classe, assurez-vous de la même chose.

De plus, parfois, si vous n'avez pas d'assertions ou que vous ne décorez pas le test avec un [TestMethod], un test peut ne pas être reconnu.

2 autres choses: 1) Les tests unitaires Async agissent au mieux de manière amusante, et pas du tout au pire. Jetez un œil à cet article de Stephen Cleary et gardez-le si cela vous intéresse.

2) Si vous utilisez NUnit et que vous rencontrez les mêmes problèmes, gardez à l'esprit que c'est [TestCase]pour Nunit, au lieu de[TestMethod]

Cela dit, voici un article que j'ai publié sur le projet de code, avec les deux MSTest& NUnit, au cas où vous voudriez l'essayer et vous assurer de ne rien manquer.

Noctis
la source
1
Tous mes tests sont comme ceci: [TestClass] public class ServicesUtilsTest {[TestMethod] public void Test1 () {Assert.IsTrue (True); }}
miguelbgouveia
ce n'est pas très clair. Mettez-le dans un bloc de code dans votre question, afin qu'il puisse être compris :)
Noctis
Tous mes tests sont pour le code de synchronisation, et je pense que mon problème n'est pas dans le code des tests unitaires mais plutôt dans Visual Studio qui ne découvre parfois pas les tests.
miguelbgouveia
Essayez plutôt d'utiliser ceci:using Microsoft.VisualStudio.TestTools.UnitTesting;
Noctis
1
J'utilise déjà Microsoft.VisualStudio.TestTools.UnitTesting. Cet espace de noms est défini dans la dll Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
miguelbgouveia
28

J'ai eu le même problème mais aucune des autres solutions n'a fonctionné. Il s'avère que j'utilisais le framework NUnit 3 avec l'adaptateur 2.

Si vous utilisez NUnit 3, accédez à Extensions et mises à jour et installez l'adaptateur de test NUnit3.

Franc
la source
Cela dit dans la description du package Nuget. Mais si vous êtes comme moi et que vous ne lisez pas, j'espère que cela vous aidera: "Ce paquet inclut l'assembly du framework NUnit 3.0, qui est référencé par vos tests. Vous devrez installer la version 3.0 du nunit- programme console ou un programme d’exécution tiers prenant en charge NUnit 3.0 afin d’exécuter des tests. Les exécuteurs destinés à être utilisés avec NUnit 2.x n’exécuteront pas correctement les tests 3.0. »
Frank
Dans mon cas, je savais que cela avait quelque chose à voir avec la mise à jour NUnit3, mais un ensemble de mes tests a réussi et les autres n'ont pas été vus. En y regardant de plus près, il y a eu de nombreuses exceptions dans la sortie, même si les tests ont tous réussi.
Rich Shealer du
C'était le cas pour moi aussi. J'avais exécuté nuget "update-package" sans m'en rendre compte mis à jour de NUnit 2.x à 3.x.
Jens
Actuellement, l'adaptateur de test NUnit 3.0 est introuvable via NuGet (voir le wiki NUnit 3.0 ). Il peut cependant être installé en tant qu'extension.
vauhochzett
1
Merci beaucoup Frank. Cela a résolu mon problème. Maintenant, je peux voir les résultats des tests unitaires dans la fenêtre de la console :)
santosh kumar patro
12

J'ai ce problème de temps en temps. Ce qui fonctionne pour moi, c'est d'arrêter Visual Studio et d'aller dans le dossier:

%LocalAppData%\Microsoft\VisualStudio\12.0\ComponentModelCache

et supprimez-le contenu.

Une fois que vous ouvrez Visual Studio et chargez à nouveau votre projet, l'Explorateur de tests doit contenir vos tests

Mariusz Gorzoch
la source
Pour moi, cela ne fonctionne pas. J'utilise Visual Studio 2013 Express avec l'installation de la mise à jour 5 récemment. Toujours pas de tests unitaires apparaissant.
miguelbgouveia
C'était aussi ce travailleur pour moi. Même travaillé sans redémarrer Visual Studio. Les heures passées dans les égouts ont finalement pris fin.
Stephan Ryer
Ce répertoire n'existe plus dans VS2017.
Noel Widmer
Merci, cela fonctionne pour moi pour tous ceux que ce dossier peut avoir une version différente en fonction de l'installation du studio visuel comme pour moi c'est le cas%LocalAppData%\Microsoft\VisualStudio\16.0_03b7a93c\ComponentModelCache
Ravi Kumar Mistry
12

Les utilisateurs de XUnit peuvent remarquer que la fenêtre de l'Explorateur de tests ne répertorie plus aucun test. Pour rendre les tests détectables à nouveau, essayez cette astuce importante , mise en évidence ci-dessous.

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

Tapez TEMP pour trouver le dossier cible

SushiGuy
la source
Cela n'a pas fonctionné pour moi. L'explorateur de tests ne trouve tout simplement pas mon test et pour autant que je sache, je ne me trompe pas et j'ai essayé certaines des solutions ici sans succès.
Skychan
En utilisant MsTestV2 - c'était la seule chose qui a résolu le problème
Nathan
5

Pour les futurs googleurs, j'ai eu un scénario rare qui a causé cela.

Sur ma classe de test de base, j'avais une propriété nommée TestContext. Cela a interféré avec la propriété TestContext réservée de MSTest, provoquant le masquage de tous mes tests de VS / Resharper sauf un (qui n'a pas hérité de la base).

Adam Behrle
la source
1
m'a eu aussi! J'ai oublié de créer la propriété de contexte de test public.
escape-llc
4

pour moi, cela changeait les «configurations de solution» en Debug (au lieu de Release).

zook2005
la source
4

Mon problème était que ma méthode de test unitaire n'était pas nulle et qu'elle recevait des paramètres.

alansiqueira27
la source
De toutes les choses ... C'était mon problème et les paramètres ont du sens. Après tout, que saurait le système de test à transmettre? La solution consiste à créer une méthode de test dans laquelle vous appelez manuellement la méthode que vous souhaitez tester. Si vous testez un projet WebAPI et que vous avez un Get avec des paramètres, vous devez toujours avoir l'appel Get correspondant, mais il n'apparaîtra pas dans l'explorateur.
MetalPhoenix
4

J'ai constaté que les méthodes de test unitaire marquées comme async voidne sont pas découvertes par l'explorateur de tests VS. Cela semble être dû au fait que VS n'aurait aucun moyen d'attendre la fin d'un test et de décider s'il a réussi ou non. Si vous avez absolument besoin d'une méthode de test pour s'exécuter de manière asynchrone, faites-la renvoyer une tâche à la place, comme async Task. J'ai trouvé que cela résolvait le problème pour moi.

cuisinier
la source
1
Cela ne répond pas à la question ci-dessus, mais c'est exactement le problème que j'essayais de résoudre. Alors tu as un accident +1 :) Merci beaucoup!
CF le
3

Essayez de construire tous les projets en MSIL (Any CPU) au lieu de x86 / x64. A travaillé pour moi étrangement

Alfons
la source
Je devais juste construire le projet Test en utilisant Any CPU, les autres projets sont restés x64
Eduardo Brites
1
Techniquement, C # / VB.NET compile toujours en MSIL. Le paramètre de projet "x86", "x64" ou "Any CPU" (et, dans les versions plus récentes, "Prefer 32-bit") est juste des indicateurs en haut de l'EXE / DLL. Le point tient toujours, cependant; NUnit ne listera pas les tests qu'il ne peut pas charger dans le moteur d'exécution, car ils sont marqués comme nécessitant une architecture particulière pour s'exécuter.
Jonathan Gilbert
3

Bien que la solution d'AndyG fonctionne, une solution plus durable pourrait être de définir la variable d'environnement PreferredToolArchitecture sur "x64", soit en:

Comment faire en sorte que Visual Studio utilise la chaîne d'outils amd64 native

ou par:

  • Panneau de configuration | Système et sécurité | Système | Paramètres système avancés | Variables d'environnement
  • PreferredToolArchitecture = x64
  • DefaultToolArchitecture = Native64Bit
  • PROCESSOR_ARCHITECTURE = x64
  • ProcessorArchitecture = x64
Kevin Johnsrude
la source
2

J'étais confronté au même problème et je me suis souvenu, encore une fois (cette situation s'est déjà produite), que la sélection de «Plate-forme mixte» dans le menu de la plateforme de solutions fonctionne, ainsi que les autres réponses.

Jeferson
la source
Mais où est le menu de la plateforme de solutions? Est-ce que c'est dans Visual Studio? J'utilise Visual Studio Express 2013 pour le Web et je ne trouve pas ce menu.
miguelbgouveia
2

J'avais réussi à ajouter le mien comme

public static void TestMethod1(){}

a commencé à travailler une fois que j'ai supprimé l'électricité statique ...

Arthur Russell Fox
la source
2

Accédez au gestionnaire de packages Nuget et téléchargez Nunit Adapter comme suit. entrez la description de l'image ici

Debendra Dash
la source
1

allez dans le menu projet> Configuration Manager vérifiez que votre plate-forme de projet de test correspond au reste du projet et est cochée pour construire puis reconstruire.

user5224229
la source
1
Je n'ai aucune option de Configuration Manager dans le menu de mon projet. Je ne peux trouver que l'option des propriétés du projet. J'ai très bien la plateforme du projet de tests unitaires et c'est la même chose des autres projets. Donc, pour moi, cette solution ne fonctionne pas.
miguelbgouveia
Définir "correspond au reste du projet"
fusionner
1

Je viens de rencontrer cela et je n'ai pas vu de cas similaire similaire au mien.

Dans le .csprojfichier de mon projet de test, la confidentialité des références NUnit a été définie sur False:

<Reference Include="nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
  <HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
  <Private>False</Private>
</Reference>

Après avoir mis <Private>à Truecela a fonctionné.

Kevin Giszewski
la source
1

Il vous suffit d'installer ce package uniquement:

NUnit TestAdapter NUnit TestAdapter

Sandy_Vu
la source
Je savais que l'utilisation d'un autre framework de test unitaire résoudrait mon problème. Mais si je voulais continuer à utiliser le framework Microsoft Unit Tests, ce n'est pas une solution.
miguelbgouveia
1

J'ai eu exactement le même problème.

Cela était dû à une version incompatible de NUnit que j'avais ajoutée à mon projet (3.2.0) et à l'adaptateur de test que j'avais installé (2.0.0).

Pour corriger, utilisez "Outils> Extensions et mises à jour" et recherchez NUnit3 Test Adapter, il a découvert mes tests après cela.

À votre santé

Francis Smith
la source
Je n'utilise pas NUnit.
miguelbgouveia
1

Disons simplement, pour des raisons d'argumentation, que vous devez utiliser l'architecture X64 sur votre projet de test pour que les dépendances se construisent correctement (comme dans mon cas). Vous devrez peut-être modifier votre architecture de processeur par défaut dans le menu Test - Paramètres de test . Définir ceci sur X64 a permis à mon explorateur de tests de trouver mes tests à l'aide de Microsoft.VisualStudio.TestTools.UnitTesting.

Dominic Hartjes
la source
1

Désolé d'avoir ajouté à la longue liste, mais j'ai eu un problème complètement différent. Tout d'abord, je voudrais mentionner que j'ai découvert mon problème en cliquant sur `` Tout exécuter '' dans l'Explorateur de tests, puis en regardant la fenêtre de sortie de construction dans Visual Studio. Vous devez le regarder activement, car ensuite le message disparaît.

En ce qui concerne le problème, il semble que lors de l'analyse des tests, la DLL est chargée et ses types de tests sont énumérés. Cela entraîne le chargement des références et en cas d'échec pendant ce processus, les tests ne seront pas affichés dans l'explorateur. J'ai eu deux problèmes empêchant le chargement de la DLL de test:

  • Il restait encore une redirection de liaison dans le fichier de configuration (redirection vers une version NHiberate inférieure à celle référencée dans le projet de test).
  • Une référence d'assemblage en conflit (les références de 2e niveau ne peuvent pas être chargées). AsmSpy est d'ailleurs un excellent outil pour les chasser.
Martijn Evens
la source
J'étais confronté au même problème, j'avais du mal à trouver quelles dll ne se chargeaient pas ....
amarnath chatterjee
1

Si vous chargez une solution Visual Studio (VS 2015 Community dans mon cas) à partir d'un partage réseau ou d'un répertoire Mes documents qui fait partie d'un partage , vous rencontrerez ce problème. Je l'ai résolu en déplaçant la solution et ses projets sous-jacents dans un dossier local.

Ton Snoei
la source
1

Après avoir passé 2 jours ... rien de ce qui précède n'a fonctionné pour moi. La seule "solution" était: Allez dans les propriétés du projet -> onglet Build. Cliquez ensuite sur le bouton Avancé dans le coin inférieur droit du volet. Modifiez «Informations de débogage:» sur «complet» et cliquez sur OK.

Voici les captures d'écran: entrez la description de l'image ici

entrez la description de l'image icientrez la description de l'image ici

curieux
la source
0

Je suis tombé sur le même problème. Et enquêté et constaté que les DLL n'étaient pas compilées et placées dans le bon dossier. dès que j'ai changé ma configuration, ils sont apparus. - les options de construction des projets, quel dossier utiliser? - la configuration de construction de l'entrée du menu de construction, ils doivent être vérifiés.

qui l'a arrangé pour moi.

kfn
la source
Pour moi, les DLL pour les tests n'ont pas non plus été construites car Visual Studio ne trouve aucun test défini. J'utilise Visual Studio Express et je n'ai pas l'entrée de menu Générer. Mais dans mon gestionnaire de configuration, toutes les options de construction sont cochées. Donc, je pense que ce n'est pas le problème pour mon cas.
miguelbgouveia
@miguelbgouveia, c'est l'inverse - VS construit des DLL, puis les scanne pour les tests. Donc, si vous n'avez pas de DLL de projet de test, vous ne trouverez certainement aucun test.
0

Pour Visual Studio 2013.5, la suppression du répertoire \ TestResults dans la solution a aidé. Visual Studio a corrompu le fichier mdf dans lequel il stocke les tests découverts, empêchant ainsi la découverte des tests unitaires.

MartijnK
la source
1
C'est dans la solution de votre projet. Cliquez avec le bouton droit sur votre fichier de projet dans l'Explorateur de solutions -> Ouvrir le dossier dans l'Explorateur de fichiers. Allez dans un répertoire à partir de là et supprimez le répertoire / TestResults. Vous devrez peut-être fermer Visual Studio pour tout supprimer. Il reconstruira le répertoire la prochaine fois que le projet sera ouvert.
MartijnK
0

Assurez-vous que tous vos projets sont exécutés avec la même configuration. Sous Propriétés de votre projet => Déboguer => Plate-forme dans la liste déroulante, choisissez la plate-forme appropriée (pour moi, c'était "N'importe quel processeur") comme déterminé dans vos autres projets.

Roni
la source
0
  • Je sais que les tests unitaires ne sont pas trouvés si la solution n'est pas construite, donc c'est quelque chose à essayer (Construire la solution), mais cette solution est comme le service d'assistance demandant si votre ordinateur est branché ...
  • Une fois qu'une reconstruction propre n'a pas résolu le problème pour moi, l'exécution d'une compilation par lots complète l'a résolu.
fusionner
la source
0

Eu le même problème; les tests ont soudainement cessé d'être découverts.

L'adaptateur de test Nunit était en quelque sorte désactivé. Cliquer sur activer dans le gestionnaire d'extensions l'a corrigé pour moi.

HeatherD
la source
0

J'ai eu le même problème jusqu'à ce que je réalise que j'ai fait une erreur de copier / coller et que je suis parti [Test Method]avant le test.

forforf
la source
Cela m'est déjà arrivé. Mais en cela, ce n'est pas le cas.
miguelbgouveia