Je suis sur un Mac, exécutant .NET Core 1.0 et Visual Studio Code.
J'ai un projet de console et un projet de test. J'ai configuré launch.json pour pouvoir déboguer le projet de console.
Comment configurer une configuration de lancement qui lance mes tests unitaires et attache le débogueur?
Voir réponse de Tyler Long . Les étapes ci-dessous ne sont pas nécessaires dans les dernières versions de Visual Studio Code :)
J'ai fait n référentiel pour démontrer.
Tout d’abord, la seule façon de faire en sorte que le débogueur passe au test consiste à ajouter un fichier, Program.cs, à prendre le contrôle du point d’entrée à partir de xUnit et à ajouter manuellement le code à tester. Ce n'est pas idéal, mais j'imagine que vous n'allez pas le faire très souvent, et il est facile de revenir à la normale.
using System;
namespace XUnitDebugging
{
public class Program
{
public static void Main(string[] args)
{
var test = new TestClass();
test.PassingTest();
Console.WriteLine("Enter text...");
Console.ReadLine();
}
}
}
Ensuite, dans project.json, ajoutez ce qui suit:
"buildOptions": {
"emitEntryPoint": true,
"debugType": "portable"
},
{
"version": "1.0.0-*",
"testRunner": "xunit",
"buildOptions": {
"emitEntryPoint": true,
"debugType": "portable"
},
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0"
},
"xunit": "2.2.0-beta2-build3300",
"dotnet-test-xunit": "2.2.0-preview2-build1029"
},
"frameworks": {
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0"
}
}
}
}
}
Cela vous permettra de déboguer un projet de test unitaire xUnit.
J'ai pu exécuter le débogueur sur un projet xUnit entier avec la configuration de lancement compliquée suivante (- === -). J'ai inspecté les appels passés par le lien "test de débogage" (dans la réponse @Tyler Long ci-dessus) via C # (Omnisharp) extension de code VS pour le comprendre. Choses à noter: 1) vous devez fournir le chemin absolu du programme dotnet 2) vous devez fournir le absolu chemin (vous ne pouvez pas utiliser ~/
ou $HOME/
) dans les dossiers .nuget/packages 3) dans l'exemple ci-dessous, le nom de l'espace de noms de mon projet test est Tests
. Une fois que cette configuration de lancement est en place, vous pouvez placer des points d'arrêt, lancer le débogueur à l'aide de cette configuration, qui devrait atteindre tous les points d'arrêt.
{
"name": "Debug xunit tests",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "/usr/local/share/dotnet/dotnet",
"args": [
"exec",
"--runtimeconfig",
"${workspaceRoot}/AppNameHere/bin/Debug/netcoreapp1.0/AppNameHere.runtimeconfig.json",
"--depsfile",
"${workspaceRoot}/AppNameHere/bin/Debug/netcoreapp1.0/AppNameHere.deps.json",
"--additionalprobingpath",
"/Users/jdoe/.nuget/packages",
"/Users/jdoe/.nuget/packages/dotnet-test-xunit/1.0.0-rc2-build10015/lib/netcoreapp1.0/dotnet-test-xunit.dll",
"${workspaceRoot}/AppNameHere/bin/Debug/netcoreapp1.0/AppNameHere.dll",
"-namespace",
"Tests"
],
"cwd": "${workspaceRoot}",
"stopAtEntry": false
}
La réponse de Tyler cliquer sur les icônes de lentille de code debug test
Est le moyen le plus simple de déboguer un seul test.
Une façon de tester tous les tests unitaires serait d’ajouter while(!Debugger.IsAttached) Thread.Sleep(500);
à l’intérieur des tests. Cela fera attendre les tests jusqu'à ce que vous attachez un débogueur.
using System;
using System.Diagnostics;
using System.Threading;
using NUnit.Framework;
namespace SomeNamespace
{
[TestFixture]
public class SomeClassTests
{
[Test]
public void ShouldDoTest()
{
while(!Debugger.IsAttached) Thread.Sleep(500);
Assert.That(true, Is.True);
}
[Test]
public void ShouldDoTest2()
{
while(!Debugger.IsAttached) Thread.Sleep(500);
Assert.That(true, Is.True);
}
}
}
Cela vous permet ensuite d'attacher le débogueur de code Visual Studio au testhost.dll en cours d'exécution. Sélectionnez simplement .NET Core Attach
Puis le dotnet testhost.dll
.