120 votes

Comment exécuter NUnit en mode débogage depuis Visual Studio ?

J'ai récemment construit un cadre de test pour un peu de C# sur lequel je travaille. J'ai configuré NUnit et un nouveau projet dans mon espace de travail pour tester le composant. Tout fonctionne bien si je charge mes tests unitaires à partir de Nunit (v2.4), mais je suis arrivé à un point où il serait vraiment utile d'exécuter en mode débogage et de définir des points d'arrêt.

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

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

J'utilise la version console, mais j'ai aussi essayé d'appeler l'interface graphique. Les deux me donnent la même erreur lorsque j'essaie de lancer le débogage :

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

Est-ce parce que je charge normalement \DSP.nunit dans le Nunit GUI et c'est là que les tests sont tenus ?

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

Editar : Pour ceux qui s'interrogent sur les montages de test, l'un de mes fichiers .cs dans le projet TestDSP ressemble à peu près à ceci :

namespace Some.TestNamespace
{
    // Testing framework includes
    using NUnit.Framework;

    [TestFixture]
    public class FirFilterTest
    {
        [Test]
        public void Test01_ConstructorTest()
        {
            ...some tests...
        }
    }
}

...Je suis assez novice en C# et dans le cadre de test NUnit, il est donc tout à fait possible que j'aie manqué une information cruciale ;-)

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 son propre cadre de test, d'après ce que je sais. Vous devriez choisir un normal Le projet de bibliothèque de classe C# à la place et alors les instructions dans ma réponse sélectionnée fonctionneront.

0 votes

La classe de votre dispositif de test me semble correcte, il doit donc s'agir de quelque chose dans le projet comme vous l'avez suggéré.

2 votes

Regardez comme cette question : stackoverflow.com/questions/247900/ La réponse est la même...

102voto

Matt Hamilton Points 98268

Lorsque j'ai besoin de déboguer mes tests NUnit, j'attache simplement à l'application NUnit GUI nunit-agent.exe en utilisant "Debug|Attach to Process" et en exécutant les tests à partir de l'interface graphique. Tous les points d'arrêt de mes tests (ou du code qu'ils testent) sont atteints. Est-ce que j'ai mal compris votre question, ou est-ce que cela fonctionnera pour vous ?

0 votes

Je viens d'essayer et cela fonctionne effectivement. Si la réponse de Patrick est négative, j'accepterai cette solution comme viable :-)

7 votes

Pour votre information (et celle des autres) : la fonction Debug|Attach n'est pas disponible dans les éditions Express de VS.

15 votes

Sachez que vous devez sélectionner "Enable Visual Studio Support" dans la boîte de dialogue Settings of NUnit -> IDE Support.

46voto

Patrick McDonald Points 20645

J'utilise la même technique que celle que vous essayez de mettre en œuvre, Jon, sans le drapeau /assembly, à savoir

Start External Program: C:\Program Files\NUnit 2.4.8\bin\nunit.exe

Command line arguments: "<path>\bin\Debug\Quotes.Domain.Tests.dll"

TestDSP.dll contient-il tous vos TestFixtures ?

Comme mon projet de test n'est pas le projet de démarrage de la solution, j'exécute mes tests en faisant un clic droit sur le projet de test et en choisissant Debug --> Start New Instance

1 votes

J'ai essayé ce que vous avez suggéré (supprimer le /assembly) mais cela ne fait aucune différence. Lorsque je lance une nouvelle instance, l'erreur se produit. Je pense que c'est surtout dû au fait que lorsque j'ai créé le projet TestDSP, je l'ai créé à partir du modèle de projet de test intégré à VisualStudio et qu'il recherche donc le mauvais cadre de test.

0 votes

Quelle est la taille de votre projet ? Pourriez-vous créer un nouveau projet vide, ajouter une référence à NUnit et ajouter toutes vos classes TestFixture ? Si vous avez créé le projet à l'aide du modèle Visual Studio, ne pouvez-vous pas utiliser l'exécuteur de test Visual Studio pour exécuter vos tests ?

3 votes

J'ai enfin réussi à le faire fonctionner. J'avais raison dans la mesure où ce sont les options du projet qui l'arrêtaient - recréer le projet de test en utilisant le modèle de classe standard a réglé le problème.

22voto

user276648 Points 850

Il suffit de supprimer la ligne qui ressemble à

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

de votre fichier de projet. Cette ligne indique à VS.Net qu'il s'agit d'un projet de test, d'où le message "Cannot start test project". Pour votre information, le premier guide dit "c'est un test", le second dit "c'est C#". Pour plus d'informations sur ces guides : http://www.mztools.com/Articles/2008/MZ2008017.aspx

18voto

dblood Points 928

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

En utilisant NUnit 2.6, attachez-vous à nunit.exe ou nunit-console.exe et NON à l'agent. La configuration notée par @Justin est légèrement différente. Voici un exemple tiré de nunit.exe.config (identique pour nunit-console.exe.config).

<startup useLegacyV2RuntimeActivationPolicy="true">
  <!-- Comment out the next line to force use of .NET 4.0 -->
  <supportedRuntime version="v2.0.50727" />  
  <supportedRuntime version="v4.0.30319" />
</startup>

Pour le projet de test .NET 4, pour que les points d'arrêt soient activés, vous devez commenter ou supprimer la ligne v2.0 comme le suggère le commentaire. Une fois que j'ai fait cela, j'ai pu déboguer le projet de test .NET 4.0.

0 votes

J'ai eu du succès avec seulement le v2.0.50727 lors du débogage d'assemblages .NET 2 à partir de VS2005 avec nunit. (La v4 a empêché le débogueur de VS 2005 de s'attacher).

18voto

Scott Chamberlain Points 32782

Si vous utilisez NUnit 2.4 ou plus récent, vous pouvez mettre le code suivant dans votre fichier SetUpFixture classe. (Vous pouvez le faire avec des versions plus anciennes, mais vous devrez faire l'équivalent de la classe SetUpFixture ou le copier dans le test lui-même).

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

Quoi Debugger.Launch() provoque l'apparition de la boîte de dialogue suivante lorsque vous cliquez sur Run dans NUnit.

JIT Debugger Dialog

Vous choisissez ensuite votre instance de Visual Studio en cours d'exécution avec votre projet ouvert (la deuxième dans ma capture d'écran), le débogueur sera alors attaché et tous les points d'arrêt ou exceptions apparaîtront dans Visual Studio.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X