Comment puis-je exécuter NUnit en mode débogage à partir de Visual Studio?

J’ai récemment construit un framework de test pour un peu de C # sur lequel j’ai travaillé. J’ai NUnit configuré et un nouveau projet dans mon espace de travail pour tester le composant. Tout fonctionne bien si je charge mes tests unitaires de Nunit (v2.4), mais je suis arrivé au point où il serait vraiment utile de fonctionner en mode débogage et de définir des points de rupture.

J’ai essayé les suggestions de plusieurs guides qui suggèrent tous de changer les propriétés de ‘Debug’ du projet de test:

Start external program: C:\Program Files\NUnit 2.4.8\bin\nunit-console.exe Command line arguments: /assembly: \TestDSP\bin\Debug\TestDSP.dll 

J’utilise la version de la console, mais j’ai également essayé d’appeler l’interface graphique. Les deux me donnent la même erreur lorsque j’essaie de déboguer:

 Cannot start test project 'TestDSP' because the project does not contain any tests. 

Est-ce parce que je charge normalement \ DSP.nunit dans l’interface graphique de Nunit et c’est là que se déroulent les tests?

Je commence à penser que le problème est peut-être que VS veut exécuter son propre framework de test et c’est pourquoi il ne trouve pas les tests NUnit?

Edit : Pour ceux qui posent des questions sur les appareils de test, l’un de mes fichiers .cs du projet TestDSP ressemble à ceci:

 namespace Some.TestNamespace { // Testing framework includes using NUnit.Framework; [TestFixture] public class FirFilterTest { [Test] public void Test01_ConstructorTest() { ...some tests... } } } 

… Je suis assez nouveau sur C # et sur le framework de test NUnit, il est donc tout à fait possible que j’ai manqué quelques informations cruciales 😉

Solution finale : Le gros problème était le projet que j’avais utilisé. Si vous choisissez Other Languages -> Visual C# -> Test -> Test Project … Lorsque vous choisissez le type de projet, Visual Studio essaiera d’utiliser sa propre infrastructure de test, pour autant que je sache. Vous devriez choisir un projet de bibliothèque de classe C # normal à la place, puis les instructions de ma réponse sélectionnée fonctionneront.

J’utilise la même technique que vous essayez Jon, sans l’indicateur / assembly, c’est-à-dire

 Start External Program: C:\Program Files\NUnit 2.4.8\bin\nunit.exe Command line arguments: "\bin\Debug\Quotes.Domain.Tests.dll" 

Est-ce que TestDSP.dll contient tous vos TestFixtures?

Comme mon projet de test n’est pas le projet de démarrage de la solution, je lance mes tests en cliquant avec le bouton droit de la souris sur le projet de test et en choisissant Debug -> Start New Instance

Lorsque j’ai besoin de déboguer mes tests NUnit, je connecte simplement l’application nunit-agent.exe à l’interface graphique de NUnit en utilisant “Debug | Attach to Process” et lancez les tests depuis l’interface graphique. Tous les points d’arrêt dans mes tests (ou le code qu’ils testent) sont touchés. Est-ce que je comprends mal votre question ou est-ce que cela fonctionnera pour vous?

Supprimez simplement la ligne qui ressemble à

  {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}  

à partir de votre fichier de projet. Cette ligne dit essentiellement à VS.Net qu’il s’agit d’un projet de test, donc du “projet de test impossible à démarrer”. Pour info, le 1er Guid dit “c’est un test”, le 2ème dit “c’est C #”. Pour plus d’informations sur ces règles: http://www.mztools.com/Articles/2008/MZ2008017.aspx

En plus de la réponse fournie par @Justin, voici quelques détails supplémentaires sur NUnit 2.6.

Utiliser NUnit 2.6 pour joindre nunit.exe ou nunit-console.exe et PAS l’agent. La configuration notée par @Justin est légèrement différente. Voici un exemple de nunit.exe.config (identique pour nunit-console.exe.config).

      

Pour que le projet de test .NET 4 obtienne des points d’arrêt, vous devrez commenter ou supprimer la ligne v2.0, comme le suggère le commentaire. Une fois cela fait, j’ai pu déboguer le projet de test .NET 4.0.

Si vous utilisez NUnit 2.4 ou une version plus récente, vous pouvez mettre le code suivant dans votre classe SetUpFixture . (Vous pouvez le faire avec les anciennes versions, mais vous devrez faire tout ce qui est équivalent à SetUpFixture , ou le copier dans le test lui-même.)

 [SetUpFixture] public class SetupFixtureClass { [SetUp] public void StartTesting() { System.Diagnostics.Debugger.Launch(); } } 

Ce que Debugger.Launch() fait, la boîte de dialog suivante apparaît lorsque vous cliquez sur Exécuter dans NUnit.

Dialogue de débogage JIT

Vous choisissez ensuite votre instance de Visual Studio en cours d’exécution avec votre projet ouvert (le second dans ma capture d’écran), puis le débogueur sera joint et tous les points d’arrêt ou exceptions apparaîtront dans Visual Studio.

Dans Nunit 3.0.1 (j’utilise VS2013), ouvrez le menu principal> Test> Windows> Test Explorer. Ensuite, dans “Explorateur de tests”, cliquez avec le bouton droit sur le scénario de test, vous pourriez voir: entrer la description de l'image ici

J’espère que cela t’aides.

Installez TestDriven.NET , qui est un plug-in pour Visual Studio

De là, vous pouvez cliquer avec le bouton droit sur votre test unitaire et cliquer sur Run Tests pour exécuter la suite entière, cliquez avec le bouton droit sur une classe TestFixture pour exécuter uniquement les tests de cette classe ou cliquez avec le bouton droit sur une méthode Test.

Vous avez également la possibilité de tester avec le débogueur, si vous devez établir un point d’arrêt dans vos tests en mode débogage.

Essayez NUnitit – un complément Open Source Visual Studio pour le débogage des cas de test NUnit

Page d’accueil – http://nunitit.codeplex.com/

Supprimez ProjectTypeGuids du fichier de projet.

Si vous parvenez à faire fonctionner la console ou l’interface graphique, mais que vos points d’arrêt ne sont pas atteints, cela peut être dû au fait que votre application exécute un runtime différent de .NET par rapport à NUnit. Vérifiez si votre environnement d’exécution est spécifié pour votre nunit-console.exe.config / nunit.exe.config (les configurations sont stockées dans le même répertoire que l’exécutable nunit). Spécifiez le moteur d’exécution à l’aide du nœud de démarrage:

     

Si le chemin du projet contient des espaces, par exemple “Nouveau projet” dans le chemin \bin\Debug\New Project\Quotes.Domain.Tests.dll ensuite le chemin du projet Option de ligne -> Arguments de la ligne de commande entre guillemets.

J’ai passé beaucoup de temps à comprendre cela.

Maintenant avec des images:

  1. Exécutez NUnit gui ( Téléchargez 2.6.2 à partir d’ici ) puis allez dans File -> Open Project

entrer la description de l'image ici

  1. Sélectionnez votre .dll de test à partir du dossier bin ( C:\......\[SolutionFolder][ProjectFolder]\bin\Debug\xxxxTests.dll )

  2. Accédez à Visual Studio Debug -> Attach to process (la pièce jointe à la fenêtre de processus s’ouvre)

  3. nunit-agent.exe défiler la liste et sélectionnez nunit-agent.exe puis cliquez sur Attach

entrer la description de l'image ici

  1. À ce stade, les points d’arrêt dans vos tests devraient devenir rouges (à partir de creux).

  2. Cliquez sur Run sur Nunit Gui et vous devriez obtenir votre point d’arrêt frappé …

J’espère que cela vous fera gagner du temps.

En ce qui concerne ce que M. Pasortingck McDonald a dit

Comme mon projet de test n’est pas le projet de démarrage de la solution, je lance mes tests en cliquant avec le bouton droit de la souris sur le projet de test et en choisissant Debug -> Start New Instance

J’ai essayé de postuler pour ma bibliothèque de classes de test mais j’ai eu des erreurs concernant le chemin, j’ai donc essayé de supprimer les arguments de la ligne de commande, et heureusement, cela a bien fonctionné et comme prévu.

On dirait que vous essayez d’utiliser la mauvaise bibliothèque. NUnit ne peut démarrer que si la DLL utilisée contient TestFixtures.

+1 sur TestDriven.Net. J’ai eu la chance de l’utiliser plusieurs fois. Vous pouvez télécharger la version personnelle à des fins d’évaluation conformément à la licence disponible sur http://testdriven.net/purchase_licenses.aspx .

J’ai eu la même erreur avec MSTest. J’ai trouvé que dans la fenêtre de sortie de test , certains des tests avaient des ID en double et ne pouvaient pas être chargés. J’ai supprimé tous les tests en double et j’ai pu exécuter les tests au démarrage du projet.

Il y a aussi une extension maintenant “Visual NUnit” qui vous permettra d’exécuter les tests à partir de Visual Studio, un peu comme les descripteurs de framework de test intégrés. Découvrez-le dans le gestionnaire d’extensions.

Ouvrez Visual Studio —> votre projet —> Sélectionnez «Propriétés» —> Sélectionnez «Déboguer» -> Sélectionnez «Démarrer un programme externe» et définissez le chemin de votre NUnit (par exemple: Démarrer un programme externe = C). : \ Program Files \ NUnit 2.6.2 \ bin \ nunit.exe) —-> Enregistrer

Après avoir défini ceci, cliquez simplement sur Debug

Pour moi, la solution consistait à adapter le fichier de configuration sans unité. Pour utiliser nunit avec le framework 4.5-.Net et l’option de construction x64, j’ai dû append une ligne à la balise de démarrage (version d’exécution prise en charge).

     

Ensuite, je pourrais commencer par un clic droit sur le Debug Testproject -> Démarrer une nouvelle instance. Avant, je devais relier manuellement le projet au processus.

Mes propriétés de débogage étaient, C: \ Program Files (x86) \ NUnit 2.6.4 \ bin \ nunit.exe avec l’argument de l’emplacement du fichier .dll à tester.

Plus d’informations: nunit pour tester avec .NET 4.0

Voir si cela aide .. Comment append NUnit dans Visual Studio

(RighteousRant) Bien que personnellement je n’aime pas cette approche. Si vous avez besoin d’un débogueur pendant que vous testez votre code, c’est une “odeur” dans la mesure où vous n’avez pas suffisamment confiance / savoir comment fonctionne votre code. débogueur pour vous dire ça. TDD devrait vous libérer du besoin d’un débogueur si c’est bien fait. Utilisez ‘Joindre le débogueur à NUNit’ uniquement dans des cas rares ou lorsque vous vous glissez dans le code de quelqu’un d’autre.