Подтвердить что ты не робот

Отладка тестов xunit в .NET Core и Visual Studio Code

Я нахожусь на Mac, используя .NET Core 1.0 и Visual Studio Code

У меня есть консольный проект и тестовый проект. У меня есть setup launch.json, чтобы я мог отлаживать проект консоли.

Как настроить конфигурацию запуска, которая запускает мои модульные тесты и присоединяет отладчик?

4b9b3361

Ответ 1

EDIT: см. Ответ Тайлера Лонга. Следующие шаги не требуются в новейших версиях кода VS:)

Я сделал repo, чтобы продемонстрировать.

Во-первых, единственный способ заставить отладчика попасть в тест - это добавить Program.cs, взять контроль над точкой входа из XUnit и вручную добавить код для тестирования. Это не идеально, но я думаю, что вы не будете делать это очень часто, и легко вернуть его в нормальное русло.

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

        }
    }
}

Затем project.json добавьте в свой проект project.json следующее:

  "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"
        }
      }
    }
  }
}

Это позволит вам отладить проект xunit unit test.

Ответ 2

Если вы устанавливаете новейшее программное обеспечение и библиотеку, это очень легко отлаживать:

введите описание изображения здесь

Как вы можете видеть на скриншоте, просто нажмите "debug test" и отлаживайте его!

Ответ 3

Мне удалось запустить отладчик во всем проекте xUnit со следующей сложной конфигурацией запуска. Я выяснил, что ссылка "проверка отладки" (в ответе @Tyler Long выше) выполняла через расширение С# (Omnisharp) VS Code, чтобы понять это. Следует отметить: 1) вы должны указать абсолютный путь к программе dotnet. 2) вы должны указать абсолютный путь (т.е. Вы не можете использовать ~/ или $HOME/) для папок .nuget/packages 3) в приведенном ниже примере, имя моего пространства имен тестовых проектов Tests. После того, как вы установили эту конфигурацию запуска, вы можете разместить точки останова, запустить отладчик с помощью этой конфигурации, и он должен ударить по всем точкам останова.

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

Ответ 4

Ответ Тайлера щелчка на значках значков debug test - это самый простой способ отладки одного теста.

Способом тестирования всех модульных тестов было бы добавить while(!Debugger.IsAttached) Thread.Sleep(500); внутри тестов. Это заставит тесты ждать, пока вы не присоедините отладчик.

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

Это позволяет вам присоединить отладчик vscode к запущенному testhost.dll. Просто выберите .Net Core Attach, а затем dotnet testhost.dll

Debug .Net Core Attach