Отладка тестов xunit в .NET Core и Visual Studio Code
Я нахожусь на Mac, используя .NET Core 1.0 и Visual Studio Code
У меня есть консольный проект и тестовый проект. У меня есть setup launch.json, чтобы я мог отлаживать проект консоли.
Как настроить конфигурацию запуска, которая запускает мои модульные тесты и присоединяет отладчик?
Ответы
Ответ 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]()