Débogage des tests xUnit in.NET code de base et Code visuel du Studio

je suis sur Mac, j'exécute .NET Core 1.0 et Visual Studio Code.

j'ai un projet console et un projet test. J'ai lancer le programme d'installation.json pour que je puisse déboguer le projet de console.

comment configurer une configuration de lancement qui lance les tests de mon unité et fixe le débogueur?

27
demandé sur Peter Mortensen 2016-07-01 15:55:22

4 réponses

Voir Tyler Longue réponse . Les étapes ci-dessous ne sont pas nécessaires dans les versions les plus récentes de Visual Studio Code:)


j'ai fait "1519100920 un" référentiel pour le démontrer.

tout d'abord, le seul moyen pour que le débogueur réussisse le test était d'ajouter un fichier, un programme.cs, prendre le contrôle du point d'entrée à partir de xUnit, et ajouter manuellement du code à tester. Ce n'est pas idéal, mais je vous imagine on ne va pas faire ça très souvent, et c'est facile de revenir à la normale.

programme.cs:

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();

        }
    }
}

Prochain dans le cadre du projet.JSON ajouter le texte suivant:

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

du projet.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 d'unité xUnit.

10
répondu Nick Acosta 2018-05-19 11:42:19

si vous installez le dernier logiciel et la bibliothèque, il est très facile de déboguer:

enter image description here

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

87
répondu Tyler Long 2016-07-14 11:10:20

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

{
  "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
}
12
répondu Brady 2016-09-18 18:48:27

la réponse de Tyler de cliquer sur les icônes de lentilles de code debug test est la façon la plus facile de déboguer un test simple.

une façon de tester tous les essais unitaires serait d'ajouter while(!Debugger.IsAttached) Thread.Sleep(500); à l'intérieur des essais. Cela va faire attendre les tests jusqu'à ce 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 d'attacher le débogueur Visual Studio Code au testhost en cours d'exécution.DLL. Sélectionnez simplement .NET Core Attach et ensuite le dotnet testhost.dll .

Debug .NET Core Attach

9
répondu PiTrick 2018-05-19 11:44:56