64 votes

Déboguer les tests xUnit dans .NET Core et Visual Studio Code

Je suis sur un Mac, exécutant .NET Core 1.0 et Visual Studio Code.

J'ai un projet console et un projet de test. J'ai configuré launch.json pour pouvoir déboguer le projet console.

Comment configurer une configuration de lancement qui lance mes tests unitaires et attache le débogueur?

178voto

Tyler Long Points 1216

Si vous installez le dernier logiciel et la bibliothèque, debuguer est super facile:

entrez la description de l'image ici

Comme vous pouvez le voir sur la capture d'écran, il vous suffit de cliquer sur "debug test" et de le debugger!

7 votes

Comment déboguer et/ou exécuter tous les tests ?

4 votes

@gerrard00 Je ne sais pas comment déboguer tous les tests. Pour exécuter tous les tests, dotnet test.

4 votes

Juste pour ajouter que dans le fichier project.json de votre projet de test, vous voudrez peut-être ajouter ceci à la section buildOptions. "debugType": "portable". Cela résoudra le problème de "Pas de symbole chargé pour ce document"

14voto

Nick Acosta Points 1541

Consultez la 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 créé un dépôt pour le démontrer.

Tout d'abord, la seule façon dont j'ai pu obtenir le débogueur pour atteindre le test était d'ajouter un fichier, Program.cs, de prendre le contrôle du point d'entrée de xUnit, et d'ajouter manuellement du code à tester. Ce n'est pas idéal, mais je suppose que vous ne ferez pas cela très souvent, et c'est facile de revenir à la normale.

Program.cs:

using System;
namespace XUnitDebugging
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var test = new TestClass();
            test.PassingTest();
            Console.WriteLine("Entrez du texte...");
            Console.ReadLine();

        }
    }
}

Ensuite, dans project.json, ajoutez ce qui suit :

  "buildOptions": {
    "emitEntryPoint": true,
    "debugType": "portable"
  },

project.json:

{
  "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.

2 votes

Ça marche pour moi. Au fait, vous n'avez pas besoin de commenter/décommenter "testRunner": "xunit" et ça fonctionne simplement.

3 votes

Je vais accepter cette réponse car elle était correcte au moment où j'ai posté la question - il n'y avait en effet aucune manière élaborée de déboguer les tests unitaires dans VSCode 1.2.

0 votes

Est-ce disponible sur VSCode pour MacOS également?

12voto

Brady Points 885

J'ai pu exécuter le débogueur sur un projet xUnit entier avec la configuration de lancement suivante compliquée. J'ai inspecté les appels que le lien "debug test" (dans la réponse de @Tyler Long ci-dessus) effectuait à travers l'extension C# (Omnisharp) de VS Code pour comprendre cela. Choses à noter : 1) vous devez fournir le chemin absolu du programme dotnet 2) vous devez fournir le chemin absolu (c'est-à-dire que vous ne pouvez pas utiliser ~/ ou $HOME/) aux dossiers .nuget/packages 3) dans l'exemple ci-dessous, le nom de l'espace de noms de mon projet test est Tests. Une fois cette configuration de lancement en place, vous pouvez placer des points d'arrêt, lancer le débogueur en utilisant cette configuration et il devrait atteindre tous les points d'arrêt.

{
  "name": "Déboguer les tests xunit",
  "type": "coreclr",
  "request": "launch",
  "preLaunchTask": "build",
  "program": "/usr/local/share/dotnet/dotnet",
  "args": [
    "exec",
    "--runtimeconfig",
    "${workspaceRoot}/NomApplicationIci/bin/Debug/netcoreapp1.0/NomApplicationIci.runtimeconfig.json",
    "--depsfile",
    "${workspaceRoot}/NomApplicationIci/bin/Debug/netcoreapp1.0/NomApplicationIci.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}/NomApplicationIci/bin/Debug/netcoreapp1.0/NomApplicationIci.dll",
    "-namespace",
    "Tests"
  ],
  "cwd": "${workspaceRoot}",
  "stopAtEntry": false
}

3 votes

Merci, c'est génial! Une petite chose que j'ai faite pour rendre cela un peu plus facile à partager avec mes collègues est d'ajouter un lien symbolique vers le répertoire .nuget à la racine de l'espace de travail: ln -s ~/.nuget, puis de changer /Users/jdoe en ${workspaceRoot} -- Ce n'est pas idéal, mais c'est une configuration unique. (N'oubliez pas d'ignorer .nuget/ dans votre configuration VCS!!)

1 votes

@Brady Holt comment avez-vous pu inspecter les appels "debug test" ? J'essaie de reproduire cela mais mon extension Omnisharp utilise un package différent de celui spécifié.

10voto

PiTrick Points 91

La réponse de Tyler en cliquant sur les icônes de l'objectif 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 permettra aux tests d'attendre que vous attachiez 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 de attacher le débogueur de Visual Studio Code au fichier testhost.dll en cours d'exécution. Il suffit de sélectionner .NET Core Attach puis le dotnet testhost.dll.

Déboguer .NET Core Attach

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