web-dev-qa-db-fra.com

MSTest: aucun test n'est exécuté car aucun test n'est chargé ou les tests sélectionnés sont désactivés

J'ai une solution c # avec la structure suivante:

mySolution
  myProject
  myProject.MSTests
    References
      Microsoft.VisualStudio.QualityTools.UnitTestFramework
    sutMSTests.cs

sutMSTests.cs:

[TestClass()] 
public class sutMSTests
{
    [TestMethod]
    public void MyTest0()
    {
        Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(4, 2 + 2);
    } 
}

Lorsque j'essaie d'exécuter les tests via Test, Exécuter, Tous les tests en solution, j'obtiens ce qui suit sur la ligne d'état VS2008:

Aucun test n'est exécuté car aucun test n'est chargé ou les tests sélectionnés sont désactivés.

Test, Windows, Test View ne montre aucun test.

Remarque: J'ai créé les tests manuellement (fonctionne pour xUnit.net) au lieu d'utiliser les assistants de Microsoft.

J'ai comparé ma configuration MSTest créée à la main à la configuration d'un autre test que j'ai généré à l'aide de l'assistant et ils semblent être suffisamment similaire.

Question: Quelles sont les causes les plus probables du message d'erreur ci-dessus?

Edit 2010-02-25: Plus d'informations:
J'ai cliqué avec le bouton droit sur le dossier Solution Items et j'ai choisi Ajouter, Nouveau projet, tapez Test Projects, Test Documents :: Visual Studio Test Project template.

Le test par défaut du nouveau projet "TestMethod1" a été détecté et réussi.
Cependant, mon test ne s'est pas affiché ... j'ai donc copié et collé ma méthode de test dans le projet de test par défaut "TestProject1".

Mon test a été détecté dans "TestProject" MAIS pas à son emplacement d'origine.

J'ai comparé de près les fichiers, l'organisation et les paramètres de "TestProject1" avec mon projet de test créé à la main.

À ce stade, je devine que certains paramètres sont définis par le modèle de projet de test Visual Studio qui n'est pas facilement détectable.

imo, il devrait être aussi facile de créer un projet de test à la main que d'en créer un avec le modèle de projet de test Visual Studio.

veuillez noter: je ne dis pas que je suis contre l'utilisation du modèle de projet de test Visual Studio; pour moi, j'aime comprendre ce qui se cache derrière le rideau car cela fait de moi un meilleur programmeur.

62
gerryLowry

Un autre pour les googleurs - celui-ci s'est avéré être mon problème, et il est déconcertant de moi. Assurez-vous que votre projet de test est configuré pour intégrer la configuration de solution que vous utilisez. Si l'assemblage de test n'est pas en cours de construction, VS ne pourra pas trouver de tests dans l'assemblage inexistant, et vous vous cognerez la tête contre le mur pendant un certain temps :-)

75
Dan F

Peut-être un peu tard, mais cette question se pose bien, je pensais que je jetterais des miettes pour les futurs googleurs.

Bryan Cook suggère de vérifier les ProjectTypeGuids dans son article de blog sur Création manuelle d'un projet de test MS . Apparemment, les GUID magiques dont vous avez besoin sont {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} pour c # et {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} pour VB. Voir son article de blog pour plus de détails.

Dans le cas où le billet de blog disparaît, vous devez ajouter l'élément suivant dans le groupe de propriétés principal dans le fichier csproj:

<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
45
Dan F

Une autre idée pour les Googlers. Mon problème essayait de relancer les tests ignorés. Le même message d'erreur MS se produit si vous supprimez l'étiquette Ignorer. Ne réactive pas automatiquement le test. Cet article vous guide à travers la dernière étape. http://richallen.blogspot.com/2008/05/ms-test-re-enabling-ignored-tests.html

10
Joy Petko

Le correctif est simple, même s'il ne devrait pas être nécessaire, si Visual Studio a fonctionné comme il se doit.

Pour résumer ce que les autres ont contribué, en particulier dans cet article , voici ce qui a finalement fonctionné pour moi:

  • Utilisez le gestionnaire de configuration pour vous assurer que votre projet de test est sélectionné pour être intégré à la configuration et à la plateforme que vous utilisez (ex: configuration = Debug et platform = x86)
  • Assurez-vous que votre méthode appartient à un [TestClass] et qu'il est à la fois marqué [TestMethod], et NE PAS utiliser l'attribut [Ignore]
  • Utilisez la vue test pour trouver votre test. Test View
  • Ouvrez votre fenêtre Propriétés (F4) et assurez-vous que votre test est activé Enabled
9
Gustavo Mori

L'affiche originale l'a fait, mais je suis arrivé ici après ne l'avoir pas fait:

Assurez-vous que [TestClass] est déclaré en haut, de portée publique:

namespace XYZ.API.Repository.Tests
{
    [TestClass()]
    public class ClientTests
    {
4
Dracorat

Je viens de le faire manuellement:

Création d'un nouveau projet de bibliothèque de classes C # avec le code suivant:

namespace SO_Answer
{
    public class Class1
    {
        public void Test()
        {
            var k = "Hello";
        }
    }
}

Enregistrez le projet, puis allez dans "Fichier-> Ajouter-> Nouveau projet" et choisissez "Projet de test". Après que VS a créé le projet de test unitaire, j'ai ajouté une référence au projet de bibliothèque de classes que j'ai créé précédemment.

Dans mon test, j'ai ce code:

namespace Unit_Test
{
    /// <summary>
    /// Summary description for UnitTest1
    /// </summary>
    [TestClass]
    public class UnitTest1
    {
        /// <summary>
        ///Gets or sets the test context which provides
        ///information about and functionality for the current test run.
        ///</summary>
        public TestContext TestContext { get; set; }

        #region Additional test attributes

        // You can use the following additional attributes as you write your tests:
        // Use ClassInitialize to run code before running the first test in the class
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        // Use ClassCleanup to run code after all tests in a class have run
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        // Use TestInitialize to run code before running each test 
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        // Use TestCleanup to run code after each test has run
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        #endregion

        /// <summary>
        /// The test method 1.
        /// </summary>
        [TestMethod]
        public void TestMethod1()
        {
            var f = new Class1();

        }
    }
}

Le seul code que j'ai ajouté était l'instruction a using et l'instruction var f = new Class1();. En regardant le coureur MSTest, je peux voir TestMethod1 Apparaître.

Je ne peux pas penser à une raison pour laquelle vos tests unitaires ne sont pas repris. La seule fois où j'ai eu cela, c'est parce que j'utilisais le coureur MSTest pour essayer de voir les tests NUnit par erreur. Essayez de recommencer à zéro.

2
Jason Evans

Je recevais le même message et il s'est avéré que j'avais mon projet de test unitaire sur un lecteur réseau. Une fois que je l'ai déplacé localement, cela s'est bien passé. Juste quelque chose à essayer si vous obtenez cette erreur. John

2
John Vetter

Cela pourrait être une autre raison. Vérifiez si la solution fonctionne sur 64 bits. Si c'est le cas, changez-le en x86.

2
T Jose

Lorsque vous rencontrez ce problème, dans Visual Studio, vous devez créer un projet de test. 1. Sélectionnez Test dans la barre d'outils et choisissez "Nouveau test". Créez votre projet et à ce stade créez votre méthode de test. Cela devrait fonctionner après ce point.

1
Marvin Bland

Pour la postérité: je viens de découvrir que le marquage des tests comme statiques les faisait silencieusement ne pas apparaître dans la liste des tests. Apparemment, ce n'est pas permis.

1
Jac

Aucune des autres réponses n'a fonctionné pour moi. J'ai continué à recevoir le message suivant dans la fenêtre de sortie:

------ Discover test started ------
========== Discover test finished: 2 found (0:00:00.1310428) ==========
No tests found to run.

Dans mon cas, le problème ne s'est produit qu'après avoir créé une nouvelle configuration appelée 0-Local. Je devais ajouter <DebugSymbols>true</DebugSymbols à la section appropriée de mon fichier csproj, il ressemble donc à ceci:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == '0-Local|AnyCPU'">
  <DebugSymbols>true</DebugSymbols>
  <OutputPath>bin\0-Local\</OutputPath>
</PropertyGroup>
1
David Kennedy

Cela doit être un bug et c'est une douleur absolue d'autant plus que vous devez réactiver chaque méthode de test individuellement. Cependant, un peu de réflexion latérale a produit une meilleure solution - renommer la classe de test et reconstruire. Renommez-le ensuite. Semble fonctionner. Oups - non, ce n'est pas le cas. Renommer la classe fonctionne mais lorsqu'elle est renommée, elle revient aux paramètres d'origine. L'astuce consiste à fermer Visual Studio et à supprimer le fichier .vsmdi (Visual Studio Test Meta Data). Ce sera régénéré.

1
Dave

Si votre code est CLI (managé c ++) et que votre classe de test hérite d'une classe de base abstraite, assurez-vous que votre classe de test implémente la méthode virtuelle pure de la base. si vous ne l'avez pas implémenté, vous pouvez voir le message "aucun test trouvé pour s'exécuter".

0
Ron.A

Eu ce même problème mais en relisant les réponses précédentes, tout avait l'air bien.

Dans mon cas, je venais de lancer la suite de tests, j'ai fait un petit changement, construit la solution et essayé de lancer le test. Ne pas aller. J'ai essayé plusieurs fois de construire et je cherchais les problèmes que d'autres personnes avaient essayés. Toujours pas.

J'ai appuyé sur Entrée dans l'une de mes méthodes de test pour en ajouter un nouveau, puis sur F6 pour créer la solution et cliqué sur Exécuter les tests unitaires.

Bingo! Tout s'est bien passé.

0
Tony DiTola

c'est un problème typique que j'ai rencontré aussi. mais la solution la plus simple que j'ai suivie comme la mienne est ... juste pour construire le projet une fois et le reconstruire à nouveau. afin que vous puissiez le résoudre.

0
pradip Kr Sen

J'utilisais un public TestContext TestContext méthode pour écrire dans la sortie de test et a changé la portée en private. Cela a rendu chaque test non détectable. Le remplacer par public a aidé.

0
r3verse

Un autre pour les googleurs utilisant NUnit, en particulier ceux qui ont migré du test MS Unit vers NUnit. Veuillez supprimer le type de projet Guids qui identifie le projet comme projet MS Test du fichier de projet.

<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
0
Mak R

Avez-vous un fichier VSMDI dans votre solution? Je crois que ce fichier est requis (NON VÉRIFIÉ).

0
smaclell