J'ai un problème pour déboguer un test NUnit à partir de VisualStudio. J'ai créé un projet vide (application console), puis j'ai ajouté des références à la bibliothèque NUnit et rédigé un test simple.
namespace ReimplementingLinq.Tests
{
[TestFixture]
public class WhereTest
{
[Test]
public void SimpleFiltering()
{
int[] source = { 1, 2, 3, 4, 2, 8, 1 };
var result = source.Where(val => val < 4);
int[] expected = {1,2,3,4};
CollectionAssert.AreEqual(expected, result);
}
}
}
Ensuite, j'ai suivi les conseils donnés dans ce lien Comment exécuter NUnit en mode débogage à partir de Visual Studio? mais aucune des solutions dans ce sujet ne fonctionne pour moi. Aucun de mes points d'arrêt n'est atteint pendant l'exécution du test. J'ai essayé de tester la solution en m'attachant au processus et en exécutant le projet avec un programme externe avec des arguments.
Que puis-je faire pour déboguer mon test unitaire?
En supposant que vous utilisiez une version de Visual Studio autre que Express Edition, alors TestDriven.NET pourrait être utile.
Après l'avoir installé
Malheureusement, vous ne pouvez pas utiliser cette méthode avec les éditions Express de Visual Studio, car TestDriven.NET est un plug-in pour Visual Studio et les éditions Express ne prennent pas en charge l'utilisation de plug-ins.
Vous pouvez également exécuter un test dans le débogueur via une application console:
Dans la méthode Main de l'application console, créez une nouvelle instance de votre fixuture de test, puis appelez l'une des méthodes de test. Par exemple, si j'ai un appareil appelé MyTests et un test nommé Test1, j'écrirais:
var myTests = new MyTests();
myTests.Test1();
Définissez un point d'arrêt sur la ligne où vous créez une instance de la classe MyTests
et appuyez sur F5
Configurez simplement votre projet de test de sorte que lorsque vous appuyez sur F5 (Démarrer le débogage) ou Ctrl-F5 (Démarrer sans débogage), il lance automatiquement l’interface utilisateur graphique NUnit et exécute tous les tests qu’il contient. Si des points d'arrêt sont touchés, vous pourrez également déboguer votre code de test.
Un guide étape par étape avec des images vous montre exactement comment procéder.
_ {La paresse est la mère de toute invention :-)
Si vous utilisez NUnit 2.4, vous pouvez insérer le code suivant dans votre SetUpFixture
class. (Vous pouvez le faire avec des versions plus anciennes, mais vous devrez faire l’équivalent de la variable SetUpFixture
ou le copier dans le test lui-même.)
[SetUpFixture]
public class SetupFixtureClass
{
[SetUp]
public void StartTesting()
{
System.Diagnostics.Debugger.Launch();
}
}
Qu'est-ce que Debugger.Launch()
do entraîne l'affichage de la boîte de dialogue suivante lorsque vous cliquez sur Exécuter dans NUnit.
Vous choisissez ensuite votre instance en cours d'exécution de visual studio avec votre projet ouvert (la deuxième de ma capture d'écran), puis le débogueur sera attaché et tous les points d'arrêt ou exceptions apparaîtront dans Visual Studio.
Regardez NHarness sur CodePlex .
Il s'agit d'une bibliothèque d'exécution de test très simple, basée sur la réflexion, qui reconnaît les attributs NUnit et peut être exécutée à partir d'un projet dans Visual Studio Express, permettant ainsi le test de débogage.
Il a actuellement une granularité au niveau de la classe de test, mais les appels au niveau de la méthode sont censés être bientôt ajoutés.
Avait le même problème avec NUnit 2.5.3 et a finalement trouvé une solution différente. Voyez si cela fonctionne pour vous:
Ouvrez l'interface graphique NUnit et ouvrez la boîte de dialogue Paramètres ... du menu Outils. Sélectionnez la sous-section Assembly Isolation de la section Test Loader dans l’arborescence Paramètres. Définissez le modèle de processus par défaut sur Exécuter les tests séparément dans le processus NUnit.
Je l'avais paramétré sur Exécuter les tests dans un seul processus, ce qui explique pourquoi le débogueur ne pouvait pas lier ma DLL sous test aux symboles de débogage. J'utilise toujours Utiliser un sperate AppDomain par assembly pour mon utilisation de domaine par défaut.