Tests unitaires non découverts dans Visual Studio 2017

Je me suis battu avec VS 2017 depuis que je l’ai installé. Maintenant, il semble que les tests unitaires ne s’exécutent qu’à partir de la ligne de commande “test dotnet”.

Mon projet est .NET Core 1.1.1. J’ai le SDK et la mise à jour du framework pour 1.1.1 installés.

J’ai essayé l’exemple sur MSDN ( https://msdn.microsoft.com/en-us/library/ms182532.aspx ) qui échoue également de la même manière.

Tous les packages NuGet pour les tests et le projet principal sont à jour. Et le projet de test et le projet principal sont construits sans erreur. Les tests s’exécutent avec succès à partir de la ligne de commande.

Est-ce que quelqu’un a eu des tests unitaires pour fonctionner dans VS 2017, si oui comment?

Merci John


Mise à jour – Étendre

Voici un exemple de projet de test simple qui ne fonctionne pas sur GitHub . Ceci est un exemple avec xUnit mais j’ai essayé NUnit et les tests visuels intégrés à MS studio. Quels que soient les tests ou les modifications que je fais, je ne peux pas obtenir le testeur de VS pour trouver des tests.

Ce que j’ai essayé

  • Suppression des fichiers de cache de test VS DEL %TEMP%\VisualStudioTestExplorerExtensions
  • Redémarrer VS
  • Explorateur de test de fermeture / ouverture
  • pour xUnit installé Microsoft.DotNet.InternalAbstractions ( voir l’article SO )
  • pour NUnit, assurez-vous que l’adaptateur est installé et la même version (3) que le package NUnit
  • test -> test settings -> default processor architecture est définie sur x86

La question
Quelqu’un peut-il s’il vous plaît fournir un exemple de travail d’une solution .Net Core 1.1.0 dans VS2017 (fichiers de projet .csproj) où l’explorateur de test VS trouve avec succès les tests unitaires OU montre le problème dans l’exemple donné.

Dans mon cas, il s’est avéré que je devais simplement mettre à jour mes adaptateurs de test et mon environnement de test. Terminé.

Exemple d’utilisation du gestionnaire de paquets NuGet:

entrer la description de l'image ici

Cela a juste fonctionné pour moi (ne sais pas si c’est le résultat de la modification des espaces de travail qui ont corrompu quelque chose):

Suppression des fichiers de cache de test VS dans% TEMP% \ VisualStudioTestExplorerExtensions et redémarrage de VS2017.

L’API pour les adaptateurs de test pour .NET Core a été modifiée avec la version de Visual Studio 2017 et le passage du format project.json format csproj . Cela a rendu dotnet-test-* les dotnet-test-* comme dotnet-test-nunit .

Les adaptateurs ont été mis à jour, mais la façon dont vous configurez et exécutez les tests dans Visual Studio ou sur la ligne de commande avec le dotnet test nécessite des références différentes dans vos projets de test. Méfiezvous de toute documentation que vous trouvez que les packages de référence au dotnet-test-* , car ils sont obsolètes.

Tout d’abord, votre projet de test doit cibler une plate-forme spécifique, soit .NET Core ou .NET Framework. Il ne peut pas cibler .NET Standard même si le code que vous testez est .NET Standard. En effet, la cible des tests indique sous quelle plate-forme exécuter les tests. .NET Standard est comme une PCL (Portable Class Library) en ce sens qu’il peut être exécuté sur de nombreuses plates-formes.

Ensuite, vous devez append des références à Microsoft.NET.Test.Sdk , votre framework de test de choix et un adaptateur de test compatible. Pour NUnit, vos références ressembleront à ceci,

      

Un commentaire ci-dessus mentionne l’ajout,

    

Ce n’est pas ssortingctement requirejs, mais peut aider. Il est ajouté automatiquement à tous les projets de tests unitaires par Visual Studio pour l’aider à trouver rapidement des projets avec des tests.

Si vos tests n’apparaissent pas dans Visual Studio, la première chose à faire est de fermer votre solution, puis de la rouvrir. Il semble y avoir des bogues dans Visual Studio qui ne détectent pas les modifications apscopes aux projets lorsque vous les modifiez.

Pour plus d’informations, voir Test de .NET Core avec NUnit dans Visual Studio 2017

J’ai eu le même problème et je l’ai fait fonctionner en procédant comme suit:

  • Fermez d’abord toutes les instances Visual Studio ouvertes et supprimez ce dossier:% TEMP% \ VisualStudioTestExplorerExtensions. ( Exécution de tests avec Visual Studio )
  • Accédez à votre gestionnaire de packages Nuget et installez d’abord Microsoft.NET.Test.Sdk (15.3.0-preview-20170425-07), puis installez xunit.runner.visualstudio (2.3.0-beta1-build1309). Voir la capture d’écran ci-jointe pour voir tous les paquets que j’ai dû installer pour obtenir la dernière version de VS 2017 afin de détecter mes tests. Capture d'écran Nuget

Oublier de faire en sorte que la classe de test empêche le public de découvrir les méthodes de test

J’ai eu un projet xUnit par défaut et j’ai supprimé l’exemple UnitTest1.cs en le remplaçant par une classe de test de contrôleur, avec quelques tests, mais aucun n’a été trouvé.

En bref, après la mise à jour des paquets xUnit, Test.Sdk, xUnit.runner et la reconstruction du projet, j’ai rencontré une erreur de génération:

Erreur Les classes de test xUnit1000 doivent être publiques

Heureusement la version mise à jour a jeté cette exception pour m’épargner des ennuis

La modification de la classe de test pour être publique a résolu mon problème

Dans mon cas, je cible le projet de test sur x64 Architecture et l’architecture du paramètre de test (test-> Default Processor Architecture) a été définie sur x86 . Ils ne correspondaient pas.

Après avoir rétabli l’architecture des parameters de test sur x64 et reconstruit tous les tests ont été à nouveau découverts.

J’ai eu des problèmes avec VS 2017 pour trouver aussi mon UnitTest. Ce n’était pas exactement le problème que John posait – mais c’était le premier résultat de Google que je cherchais alors je voulais partager mon problème.

J’avais une solution héritée qui revenait de VS2010 en passant par VS2013, VS2015. Maintenant, dans VS2017, il semble que les espaces de noms pour l’atsortingbut [TestMethod] aient changé.

Avant de l’utiliser

 Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0 

J’ai créé un nouveau fichier Test.dll dans le projet et celui utilisé par défaut

 Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0 

Ma solution consistait donc à créer un nouveau projet UnitTest à partir de VS2017. Changer les références d’assemblage de l’ancien projet de test aurait peut-être aussi bien fonctionné. Avec la nouvelle référence VS2017 a découvert ces tests unitaires.

Ne lisez pas les articles périmés sous MSDN. Les matériaux pertinents de .NET Core se trouvent sous docs.microsoft.com

https://docs.microsoft.com/en-us/dotnet/articles/core/testing/

D’une manière générale, vous avez besoin d’une application de console .NET Core pour contenir les cas de test unitaires.

Assurez-vous que vous utilisez le bon Microsoft.NET.Test.Sdk:

  

N’utilisez pas une version préliminaire. Ou vous devez changer pour l’application console (pas la bibliothèque). J’ai le même problème, mais avec la dernière version (15.0.0), il recommence à fonctionner.

En outre, vous devrez peut-être append:

     

mais je ne pense pas que ce soit nécessaire.

Dans mon cas, l’Explorateur de tests n’a pas pu trouver mes tests après avoir déplacé le projet vers une nouvelle solution.

La réponse était simplement que j’avais une référence à l’ancien MS Test Adapter dans mon projet.

J’avais une copie de la ligne ci-dessous pour la version 1.1.11 de l’adaptateur de test MS dans mon fichier cs.proj:

Pour résoudre le problème,

  1. Cliquez avec le bouton droit sur le projet et sélectionnez Décharger le projet.
  2. Faites un clic droit sur le projet et sélectionnez Modifier
  3. Supprimez la ligne qui importe l’ancienne version de l’adaptateur.
  4. Cliquez avec le bouton droit sur le projet et sélectionnez Reload Project.
  5. Reconstruire Solution / Projet

Je sais que OP en a fait la liste sur sa liste de contrôle, mais il est facile de négliger ce point lors d’une installation propre de Visual Studio 2017 et de la configuration d’un nouveau projet. Outre le modèle de projet NUnit et le framework NUnit, il est nécessaire d’installer séparément l’adaptateur NUnit, par exemple en utilisant la commande NuGet Install-Package NUnit3TestAdapter -Version 3.9.0 . Après cela, Visual Studio Community 2017 a commencé à découvrir des tests unitaires sans aucun problème.

Découverte

Les meilleures réponses ci-dessus ne fonctionnaient pas pour moi (redémarrage, mise à jour vers la version 1.1.18 … J’étais déjà à jour, supprimant les fichiers temporaires, effaçant le cache NuGet, etc.).

Ce que j’ai découvert, c’est que j’avais différentes références à MSTest.TestAdapter et MSTest.Framework dans différents projets de test (ma solution en avait deux). On a été désigné 1.1.18 comme …

packages.config

   

… mais un autre a les références à 1.1.11. Certaines des réponses ci-dessus mènent à cette découverte lorsque deux versions des bibliothèques sont apparues dans mon répertoire temporaire (% TEMP% \ VisualStudioTestExplorerExtensions \) après le redémarrage de Visual Studio.

Solution

La simple mise à jour de mes packages.config à la version 1.1.18 est ce qui a restauré la fonctionnalité des tests unitaires dans VS. Il semble que certains bogues ne permettent pas les références côte à côte des bibliothèques MSTest. J’espère que cela vous aidera.

Plus d’informations:

  • Visual Studio 2017 Ent: 15.5.6 (j’avais mis à jour depuis 15.0.1 avec l’espoir de résoudre ce problème, mais je l’avais dans les deux)

Dans mon cas, c’était le projet UWP présent dans la solution à l’origine du problème.

Lorsque j’ai déchargé le projet UWP, des tests ont été découverts. Lorsque je l’ai rechargé, le test a encore disparu.

Essayez de décharger tous les projets et conservez uniquement le projet de test. Dix solutions de reconstitution et test s’affichent dans Test Runner. Charger les projets un par un et reconstruire la solution à chaque fois pour savoir quel projet est à l’origine du problème

échantillon repo

Rapport de bug VS

Pour moi, il était plus facile de créer un nouveau projet de test qui fonctionne parfaitement avec Visual Studio 2017 … et il suffit de copier les fichiers de test, d’append des références et des packages NuGet si nécessaire.

entrer la description de l'image ici

J’ai tout essayé mais rien n’a aidé. Dans mon cas, j’avais une solution avec plusieurs projets de test et certains d’entre eux utilisaient l’ancien framework de test de ms, Visual Studio n’a trouvé que ceux-là.

J’ai installé les packages de framework de test pour tous les projets de test, comme indiqué dans la réponse acceptée . Ensuite, enlevé les références aux anciens outils de qualité, redémarré Visual Studio et maintenant je peux voir tous les tests.

Dans mon cas, c’était un projet que j’avais mis à niveau le projet de test à partir d’une version antérieure .Net. Dans app.config, j’avais des assemblybindings aux versions précédentes des assemblys dépendants.

Après avoir corrigé les assemblages dans le fichier app.config, mes tests ont été découverts.

Pour C ++:

Comme il n’y a pas de question particulière pour les tests C ++, mais que le sujet est très similaire, voici ce qui m’a aidé lorsque j’ai eu des problèmes avec la découverte de tests.

Si vous avez uniquement installé le développement Desktop avec C ++ , la solution consiste à installer également le développement d’Universal Windows Platform avec les outils facultatifs de la plateforme Universal C ++ de C ++ . Vous pouvez les sélectionner dans l’installateur Web de studio visuel.

Ensuite, reconstruisez votre projet de test et la découverte de test devrait fonctionner.

Btw, j’ai créé le projet de test unitaire dans VS2017. Étant donné que certains utilisateurs ont mentionné qu’ils avaient des problèmes de découverte dans les projets, ceux-ci ont été migrés de VS2015 à VS2017.

Supprimer l’ancien fichier .dll devrait vous aider. Effacer les fichiers temporaires situés dans le répertoire% TEMP% de C: \ Users (yourusername) \ AppData \ Local \ Temp

J’ai eu le même problème. Ma solution était correcte, mais lorsque j’ai ouvert la solution, j’ai découvert que les tests avaient disparu.

Enfin, j’ai réduit les paquets Microsoft.VisualStudio.TestPlatform.TestFramework et Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions à une très ancienne version (à l’aide du gestionnaire NuGet) et les méthodes de test sont apparues. Puis je suis passé à la dernière version et il y en avait encore.

Il suffit donc de rétrograder et de mettre à niveau les packages.

Le problème

Le problème est que Visual Studio devient «confus» par rapport aux versions de base de dotnet sur la machine. Lorsque je suis allé sur le panneau de configuration -> désinstaller des programmes, 8 différents SDKs et Runtimes de base dotnet étaient installés. Cela provoquait en quelque sorte une erreur silencieuse de VS lors de la recherche de tests.

Valider le problème

Vous pouvez valider le problème en allant sur la ligne de commande et obtenir la version de dotnet votre sur $ dotnet --version . Si vous voyez quelque chose à part la dernière version que vous avez installée, votre machine présente des incohérences et n’utilise pas la version correcte. Exemple … Si vous avez dotnet core 1.0.1 installé, mais quand vous obtenez la version à l’invite de commande et qu’il indique 1.0.0 c’est un problème.

La solution

Supprimez tous les anciens éléments. J’ai commencé avec seulement ce que je pensais devoir supprimer (les versions les plus anciennes de dotnet rc), mais cela donnait toujours la mauvaise version lors du test du problème. Finalement, j’ai accepté de faire un nettoyage complet. JE…

  • Désinstallation de toutes les applications Visual Studio (sur ma machine VS2015 et VS2017)
  • Désinstallation de toutes les versions de dotnet core (même les plus récentes)

Après que ma machine était complètement vide de tous les VS et de Donet, j’ai installé seulement VS2017 (il est livré avec le dernier dotnet). J’ai créé un projet de test xUnit et l’explorateur de test a trouvé le test immédiatement RESOLU

Cela peut sembler exagéré, mais j’ai passé deux semaines à essayer de résoudre ce problème autrement. Si vous rencontrez le problème, faites-le, même si cela peut prendre des heures pour désinstaller / réinstaller des éléments, vous gagnerez probablement du temps.

Les références

  • Voir l’article du blog @epestic où il donne plus de détails sur la résolution du problème.

Au début, j’ai essayé d’utiliser MSTest. Après cela, je change le test Nunit. Ensuite, je voulais soutenir MSTest. J’ai supprimé tous les codes et références nUnit mais Test Explorer n’a pas montré les méthodes MSTest. Solution: j’ai supprimé toutes les références de nuget les plus récentes et réinstallé. Terminé.

Pour moi, changer le TargetFramework dans le fichier .csproj du projet de .csproj à partir de

   netcoreapp2.0  

à

   net46  

travaillé.

La solution consistait à supprimer mon fichier app.config de mon projet de test unitaire. Les tests réapparaîtront!

Ce fichier faisait référence à certaines DLL des bindredirects qui n’étaient pas réellement présentes dans les références du projet. Ajoutez à nouveau les assemblages d’assemblage qui sont ssortingctement nécessaires pour votre projet.

Sur mon cas, rien de ce qui précède ne m’aide. Mais, je mets à niveau NUNit3TestAdapter à la version 3.8.0, puis à la dernière version (3.10.0)

Juste ce problème avec le studio visuel étant incapable de trouver mes tests, n’a pas pu voir le bouton pour les exécuter en dehors de la méthode, et ils n’ont pas été relevés en exécutant tous les tests dans le projet.

Il s’avère que ma classe de test n’était pas publique! Le rendre public a permis à VS de découvrir les tests.

pour moi la question était que j’ai placé par erreur des cas de test dans une classe interne

 [TestClass] internal class TestLib { } 

cela causait des cas non identifiés.

J’ai eu le même problème et je l’ai résolu en changeant le type de sortie de l’ application en application console , comme suit:

entrer la description de l'image ici