Les tests ne s'exécutent pas dans l'Explorateur de tests


147

Je travaille actuellement sur une solution qui a actuellement 32 Unittests. J'ai travaillé avec le lanceur de test de resharper - qui fonctionne très bien. Tous les tests sont en cours d'exécution, tous les tests affichent le bon résultat de test. Maintenant, un collègue m'a dit que les tests ne s'exécutaient pas sur sa machine à l'aide de l'explorateur de tests Visual Studio. Ils ne fonctionnent pas non plus sur ma machine, je peux donc exclure certains fichiers manquants locaux ou quelque chose.

L'explorateur de tests affiche tous les tests unitaires, mais une fois que vous cliquez sur "Tout exécuter", tous les tests sont grisés et ne montrent aucun résultat du test:

entrez la description de l'image ici

  • Toutes les classes de test sont publiques
  • Toutes les classes de test ont l' [TestClass]attribut déclaré
  • Toutes les méthodes de test utilisent l' [TestMethod]attribut
  • Le code de productivité et les projets de test ciblent .NET 3.5.
  • Je l' ai déjà essayé de construire ma propre solution, et / ou supprimer tous obj, bin, Debuget Releasedossiers

J'apprécierais tous les indices qui pourraient provoquer un tel comportement.


3
Mettez à jour votre ReSharper. Reportez-vous à ce stackoverflow.com/questions/16011775/…
kmhigashioka

18
Ne serait-il pas merveilleux que VS dise pourquoi un test n'a pas été exécuté? Plateforme cible incompatible, adaptateur de test manquant, ... :(
Bernhard Hofmann

1
Où est-il mentionné qu'ils utilisent ReSharper?
Alex 75 le

6
@BernhardHofmann J'ai rencontré un problème comme celui-ci en ce moment et il s'avère que VS crachait des messages d'erreur dans Sortie> Tests. Important. Frustrer que VS ne les rend pas plus visibles, mais c'est un endroit à regarder dans une situation comme celle-ci.
JLRishe

2
Vous pourriez tous être intéressés à voter pour cette demande de fonctionnalité: developercommunity.visualstudio.com/idea/947742/…
Kyle Delaney

Réponses:


157

Si vos projets ne sont pas tous AnyCpu, vous pouvez également vérifier que les 2 paramètres suivants correspondent:

  1. [Projet de test de clic droit] -> propriétés -> Build -> Platform target - par exemple x64

  2. [Menu principal] -> Test -> Paramètres de test -> Architecture de processeur par défaut -> X64

J'ai constaté que lorsque ceux-ci ne correspondaient pas, mon projet de test échouait silencieusement.


5
cette réponse est au coude à coude avec "allumer et éteindre à nouveau" donc, si cela fonctionne pour vous, veuillez faire un vote positif.
lukkea

celui-ci a résolu mes problèmes (passage de plates-formes mixtes à anycpu)
Marcel Studer

1
assurez-vous que vos projets de test ne sont pas netstandard2.0 mais netcoreapp2.2
user2033412

4
Travaillé. Je serais vraiment avec VS, vous savez, nous donner un avertissement clair ou un message d'erreur ou quelque chose.
Anon

9
Version VS2019: Menu principal -> Test -> Architecture du processeur pour les projets AnyCPU -> X64.
StackOverthrow

64

J'ai eu le même problème dans VS 2017. Dans mon cas, il a été résolu en redémarrant VS.


7
mon commentaire précédent sur la raison pour laquelle j'ai donné ce vote défavorable a été supprimé, je serai donc un peu plus clair. Ce n'est pas une solution au problème; c'est une solution très temporaire qui ne résout pas le problème sous-jacent. Je ne pense pas que SO devrait être un endroit où les gens devraient venir pour se faire dire "éteignez-le et rallumez-le", c'est-à-dire des connaissances à apprendre bien avant d'arriver ici. Veuillez consulter la réponse de Joseph Simpson pour une solution.
lukkea

5
@lukkea J'ai suivi la réponse de Joseph Simpson et confirmé que tous mes projets étaient AnyCpu. J'ai toujours eu le problème décrit ici. Pour moi, simplement redémarrer VS m'a aidé. Ce n'est pas la première fois que VS2012 a ce genre de hickups (et pas seulement sur ma machine). Je suis d'accord avec vous, que ce n'est pas une bonne solution, mais s'il n'y a rien de mal avec le projet, cela pourrait être la seule aide. Il faut cependant vérifier si le nettoyage d'une reconstruction n'aide pas non plus.
Sascha

2
Si seulement «allumer et éteindre à nouveau» résoudrait tous mes problèmes. Encore surprenant combien il en corrige. C'est un peu embarrassant de devoir aller à stackoverflow pour être rappelé de le faire, mais j'ai trouvé cette réponse utile.
Richard Garside le

2
@lukka parfois Visual Studio est le problème sous-jacent et le redémarrage est la solution
JSON

1
Fonctionne toujours pour VS2019 ....
Tronald

45

Si vous utilisez NUnit plutôt que MSTest, vous aurez besoin de l' extension NUnit Test Adapter pour Visual Studio 2012/2013.


9
Cela m'a aidé à comprendre que j'avais besoin d'installer le "NUnit 3 Test Adapter": marketplace.visualstudio.com/...
Westerlund.io

10
Dans VS 2019 a travaillé pour moi pour installer l'adaptateur à partir du gestionnaire de packages nuget.org/packages/NUnit3TestAdapter
maylon

Selon cette page, vous devez également installer à Microsoft.NET.Test.Sdkpartir de Nuget
BlueRaja - Danny Pflughoeft le

Dans VS 2017, j'ai installé l'adaptateur de test Extension Nunit 3 et cela a fonctionné.
Bob Lokerse

Dans VS 2019, j'ai également installé l'adaptateur de test Extension Nunit 3 et cela a fonctionné. Une note: j'avais également besoin de mettre à jour Visual Studio.
Bob Lokerse

43

J'ai dû changer mes méthodes de test asynchrone pour renvoyer Task au lieu de void.

Les tests étaient alors actifs et exécutables dans l'Explorateur de tests.


1
Il n'y a aucun moyen d'attendre la fin d'une méthode async void. Async void est "feu et oublie". C'est pourquoi ils ne peuvent pas être testés.
Ketobomb

Le visage palpitant que j'ai fait quand j'ai lu ceci a fait écho sur la terre ... Merci d'avoir signalé ma stupidité. Cela a fonctionné pour moi. Vote positif
JP Chapleau

Bien que classé dans la catégorie «no duh». Je souhaite que cela puisse être voté davantage car il est très évident que votre type de retour doit être Tâche mais facile à oublier (car apparemment aucun autre test unitaire dans le monde ne renvoie autre chose que nul) et vous envoie dans le terrier de la réparation de votre unité tester la configuration lorsqu'il n'y a pas de problème de configuration réel. Je souhaite vraiment que cela ne cause qu'un compilateur ou le moins lève une erreur d'exécution.
pat8719 le

2
@ pat8719, semble être une bonne idée pour un analyseur de code. Ils ne sont pas trop difficiles à écrire. Je viens d'écrire un fait xunit async void Foo()et leurs analyseurs ne se plaignent pas, mais ils pourraient certainement en ajouter un qui le ferait. cc: @bradwilson
benmccallum

22

Vérifiez sur quel framework les tests sont écrits (par exemple nunit, xunit, VS test, etc.) et assurez-vous que vous avez installé l'adaptateur de test / l'extension de runner.

Pour moi, c'était l'adaptateur de test NUnit 3 qui manquait et j'ai confirmé le numéro de version requis en regardant la version de dépendance nunit.framework (sélectionnez le .dll dans l'arborescence des dépendances dans l'Explorateur de solutions et appuyez sur F4 pour afficher la fenêtre Propriétés).


2
Note à moi-même: mon projet original MSTest ref'd Microsoft.VisualStudio.QualityTools.UnitTestFramework( je ne sais pas quelle version). Problèmes résolus où la méthode n'est pas exécutée (ou trouvée) en supprimant cette référence et en installant le dernier (v2.1.0) MSTest.TestAdapter (et Framework)
Adam Cox

@AdamCox est Microsoft.VisualStudio.TestTools.UnitTestingobsolète? J'ai eu quelques tests utilisant cela qui ont soudainement cessé de fonctionner comme ci-dessus après avoir rajouté des références à un projet dont ils dépendaient.
ebyrob

@ebyrob, la réponse d'Athanasios ci-dessous pourrait être pertinente. Il semble qu'il ait non seulement dû mettre à niveau / mettre à niveau vers les packages MSTest. *, Mais également ajouter des dépendances et corriger certaines redirections de liaison. Vérifiez la sortie de vos avertissements.
benmccallum le

16

TLDR: Mettez à jour les packages de test, regardez dans la sortie -> console de test

J'ai lutté avec ça pendant un jour et demi. alors voici ce que j'ai fait pour le résoudre:

Symptômes

  1. 5 projets de tests unitaires, tous détectables dans TestExplorer
  2. 2 sur 5 exécutés correctement
  3. 3 indiquant pas du tout exécuté
  4. Le problème a commencé après une mise à jour du framework .net

Enquête

Étant donné que tous les packages ont été mis à jour lors de la mise à jour du framework .net, j'ai commencé par les différences entre les projets en cours et non opérationnels. Le premier indice était que les 3 projets utilisaient: MSTest.TestAdapter et MSTest.TestFramework

Naturellement, je suis allé dans la liste déroulante -> Console de sortie -> Test dans VS 2019 et j'ai regardé la sortie. Rien d'utile là-bas.

Première étape de la solution : mettez à jour MSTest.TestAdapter et MSTest.TestFramework vers la version 2.0.0

Deuxième étape de la solution : Maintenant, la console de sortie -> La sortie de la liste déroulante Test a commencé à afficher les uns après les autres, les packages manquants et les redirections de liaison incorrectes

Troisième étape de la solution : ajoutez manuellement les packages manquants. Pour moi, c'était

  1. System.Runtime.Extentions
  2. Réflexion système
  3. Peut-être plus que je manque

Étape 4 de la solution : Suppression / Correction des redirections de liaison inutiles.

J'espère que cela aidera quelqu'un d'autre.


Tu m'as sauvé ce jour et demi! J'ai mis à niveau un projet de version 4.5 FW et essayé de supprimer tous les éléments inutiles des packages et me suis retrouvé dans cette situation. Merci!
Numan

Je pense que je vivais quelque chose de similaire. Finalement, je viens de recréer le projet à partir de zéro. Apparemment, il y a une ligne dans le fichier * .csproj qui définit ToolsVersionet cogner le mien a tout gâché. Tout ce que je peux dire, c'est "l'acheteur se méfie" pour les tests unitaires MS et soyez prêt à remplacer vos fichiers * .csproj à tout moment, ce truc est étroitement intégré et dépend de la version.
ebyrob le

Merci, bien que ce ne soit pas directement mon problème, le conseil pour vérifier la sortie de la console m'a montré l'erreur (la méthode DBContext Dispose contenait une erreur) qui empêchait l'exécution de mes tests.
Iain Carlin le


11

J'ai eu ce problème et pour moi, il était dû à plusieurs projets de test avec différentes versions de:

  • MSTest.TestAdapter
  • MSTest.TestFramework

La consolidation des packages nuget pour les projets afin qu'ils soient identiques a résolu le problème pour moi.


1
Cette réponse m'a aidé à trouver une cause similaire. Dans mon cas, certains projets de test avaient des références à Microsoft.VisualStudio.TestPlatform.TestFramework (et ne s'exécutaient pas) tandis que d'autres avaient des références à Microsoft.VisualStudio.QualaityTools.UnitTestFramework (qui étaient les projets qui seraient exécutés).
jr

11

Eu le même problème après l'installation propre de VS 2019. Les tests sont trouvés mais pas exécutés avec "Une erreur inattendue s'est produite". Corrigé en configurant x64 au lieu de x86 qui était sélectionné par défaut.

entrez la description de l'image ici


4
C'était le correctif pour moi, avec le redémarrage de VS et la suppression du dossier .vs. Je vous remercie.
Donald.Record

Je ne peux pas croire que ce soit encore un problème ... J'espère que Microsoft a sorti une sorte d'avertissement pour cet hic classique à un moment donné.
Guillaume LaHaye le

10

J'ai trouvé que dans le projet, il ne faisait pas référence à l' assemblage Microsoft.VisualStudio.QualityTools.UnitTestFramework . Au lieu de cela, il faisait référence à Microsoft.VisualStudio.TestPlatform.TestFramework et Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions . Lorsque j'ai supprimé ces deux références et ajouté la référence à l' assemblage Microsoft.VisualStudio.QualityTools.UnitTestFramework , les tests qui étaient précédemment marqués du point d'exclamation bleu sont soudainement devenus actifs et ont commencé à fonctionner.

Les tests unitaires ne sont pas exécutés avec un assemblage incorrect

Avec le bon assemblage, les tests sont exécutés


3
Après le passage de .NET Framework 4.6.2 à .NET Framework 4.7.2, mes tests ne fonctionnaient plus. Après des heures d'essais, seule cette solution a fonctionné pour moi.
Éric Bergeron le

Après le passage de .NET Framework 4.6.2 à .NET Framework 4.7.2 - J'ai dû supprimer toutes les redirections de liaison dans app.config
bkwdesign

8

Dans mon cas, c'était parce qu'un projet de test dans ma solution avait les packages de nuget MSTest.TestFramework et MSTest.TestAdapter installés, mais les autres non. Ces packages n'étaient apparemment pas nécessaires pour exécuter des tests jusqu'à ce qu'un projet de la solution les ait installés.

Le problème a été résolu en installant ces packages sur les projets de test qui les manquaient.


Dans mon cas, c'est exactement le contraire: tout projet de test unitaire, qui a les packages nuget MSTest ne fonctionnera pas, comme les autres. Étrange.
Palle Due

Résolu : j'ai un fichier .testsettings. Les packages MSTest nécessitent un fichier .runsettings. C'est pourquoi les tests ne sont pas en cours d'exécution.
Palle Due

7

Ce qui a résolu le problème pour moi, c'est la mise à niveau des packages MS.Test nuget



6

entrez la description de l'image ici

La configuration de l'architecture du processeur pour les projets AnyCPU dans l'Explorateur de tests a résolu mon problème! Voir la capture d'écran ci-dessus.


Merci beaucoup! Cela m'a aidé =)
Alexander Brattsev

4

Dans mon cas, j'avais une async voidméthode et j'ai remplacé par async Task, donc le test s'est déroulé comme je m'y attendais:

    [TestMethod]
    public async  void SendTest(){}

remplacer par :

    [TestMethod]
    public async  Task SendTest(){}

1
C'était mon problème
Kyle Delaney

3

J'avais les mêmes symptômes.

Veuillez vous assurer que l'extension Visual Studio appropriée est installée via Outils - Extensions et mises à jour. Dans mon cas, j'ai dû installer XUnit et Specflow à partir de l'option En ligne.

Ensuite, nettoyez la solution et reconstruisez-la.

Si cela ne fonctionne toujours pas, effacez votre répertoire temporaire (recherchez% temp% dans le menu Démarrer, recherchez et supprimez tout le contenu de Temp)

Et puis enfin essayez de désinstaller Resharper qui a finalement résolu mon problème.


4
Désinstaller Resharper?! Je ne pense pas que ce soit une solution ^^
Steve Rakebrandt

3

Vous pouvez afficher la sortie d'erreur de votre testeur en ouvrant le panneau de sortie (vue -> sortie) et en choisissant "tests" dans la liste déroulante "Afficher la sortie de"

afficher la sortie de


De plus, si Resharper est installé, vous pouvez ouvrir un fichier de test et survoler le cercle de test à côté d'un test pour obtenir des informations d'erreur supplémentaires.

Sortie de resharper

Cliquer dessus vous amènera à une fenêtre avec des informations plus détaillées. Vous pouvez également ouvrir cette fenêtre en allant dans Extensions -> Reshaper -> Windows -> Résultats d'exploration des tests unitaires

Exploration de test d'unité de réaffûtage


2

Ici, c'était le projet de test qui n'était pas marqué pour être construit:

Build -> Configuration Manager ... -> check build pour votre projet de test


2

Depuis que je suis arrivé ici avec ce genre d'erreur, je poste mon problème / solution:

Symptômes:

  • Tous les tests ne sont pas en cours d'exécution, mais ils ne dépendent pas du projet, seuls certains d'entre eux ont été exécutés.
  • Tous ceux exécutés étaient verts.
  • Pile technique: dotnet core / XUnit / FluentAssertions
  • Tous les tests sont détectés et mis à jour s'ils ont changé.
  • En sélectionnant ou en exécutant plusieurs fois des "tests non exécutés", ils pourraient être exécutés.

Problème:

Une erreur s'est produite dans le code qui lève une exception dans un autre thread. Toutes les assertions de test ont réussi mais cela a annulé l'exécution du test. Je pouvais voir l'erreur dans la "Sortie des tests" (NullException).


+1 J'ai essayé de déboguer un test spécifique. Quand j'ai finalement exécuté un autre test plus simple, j'ai pu déboguer le test spécifique. Cette réponse m'a amené à essayer ça.
Halvard

2

Avait les mêmes symptômes, dans mon cas, c'était la version du SDK dotnet core qui était le problème.

Les projets ciblaient 2,2 et ont pu être construits en utilisant 3,0. Après avoir installé la dernière version du SDK 2.2, ils ont pu s'exécuter.


2

Ce problème est également observé lorsque la méthode de test en cours d'exécution lève une exception StackOverflowException , ce qui oblige le testeur à abandonner l'exécution du test, ce qui entraîne la sortie 0 tests run.

Pour trouver le coupable et le résoudre, placez un point d'arrêt au début des méthodes décorées TestInitialize et TestMethod , exécutez le test unitaire en mode débogage, passez à l'étape (F10) jusqu'à ce que l'exception soit levée.


2

J'ai essayé de nombreuses options avec Visual Studio 2019 version 16.4.6 et Microsoft.VisualStudio.TestTools.UnitTesting, mais pour l'instant, le seul moyen d'exécuter des tests avec succès était d'appeler la commande suivante dans la console

dotnet test

Les tests sont découverts dans l'Explorateur de tests mais le résultat est "Non exécuté".

La mise à jour de Visual Studio n'a pas aidé.

Avoir résolu le problème avec «Aucun test ne correspond au filtre de cas de test donné FullyQualifiedName» en exécutant des mises à jour vers la dernière version pour les packages suivants:

Microsoft.NET.Test.Sdk
MSTest.TestAdapter
MSTest.TestFramework

1

Pour moi, la solution consistait à changer les paramètres de Resharper Unit Testing "Architecture de plate-forme par défaut" en "x64"

entrez la description de l'image ici


Cela a résolu mon problème avec un projet .NET Core 3.1 qui refusait d'exécuter des tests dans l'Explorateur de tests. Rien d'autre ne réglerait le problème que cela.
J_L

1

Pour moi, le redémarrage de VS2017 n'a pas fonctionné. J'ai dû nettoyer sln puis j'ai trouvé un fichier avec des tests qui ne s'exécutaient pas et n'exécutait que ce fichier. Après cela, j'ai tout couru et cela a fonctionné à nouveau normalement.


1

J'avais une version différente des packages nuget NUnit (3.11.0) et NunitTestAdapter (3.12.0). Lorsque j'ai mis à jour NUnit vers la version 3.12.0, Visual Studio a exécuté des tests.


1

Dans mon cas, cela a fonctionné pour mettre à jour les paquets nuget MSTest. Pourrait reproduire ce problème même sur un projet MSTest vierge et la mise à jour des packages a fonctionné.


1

Pour moi, avoir une propriété appelée TestContext dans une classe de base provoquait ce comportement. Par exemple:

[TestClass]
public abstract class TestClassBase
{
    protected object TestContext { get; private set; }
}

[TestClass]
public class TestClass : TestClassBase
{
    // This method not found
    [TestMethod]
    public void TestCase() {}
}

1

Je peux dire d'après vos attributs que vous utilisez MSTest. J'ai eu un problème similaire: mes tests apparaissaient dans l'Explorateur de tests, mais lorsque j'essayais de les exécuter (soit en choisissant Exécuter tout, soit en les sélectionnant individuellement), ils ne le faisaient pas.

Mon problème était que j'avais créé le projet de test unitaire manuellement à partir d'un projet de bibliothèque de classes standard .NET vide. J'avais installé le MSTest.TestFrameworkpackage NuGet, mais pas le MSTest.TestAdapterpackage. Dès que j'ai installé le package d'adaptateur, ils ont fonctionné comme prévu.

Rétrospectivement, cela semble évident, mais lorsque vous créez des projets de test unitaire à partir d'un modèle, vous prenez ces choses pour acquis.


1

Il est à noter que parfois les fichiers de l'adaptateur de test NUnit sont corrompus dans le dossier utilisateur C: \ Users [User] \ AppData \ Local \ Temp \ VisualStudioTestExplorerExtensions \ NUnit3TestAdapter.3.8.0 / build / net35 / NUnit3.TestAdapter.dll sous Windows 10 et qui empêche l'Explorateur de tests de fonctionner comme il se doit.


1

J'utilise VS2019 avec .Net 4.7. J'ai installé l'extension NUnit v3 et modifié les paramètres de test pour utiliser X64. Mon projet de test unitaire est Any CPU (fonctionnerait si je le changeais en x64). Maintenant, je peux déboguer via mon code.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.