Как отлаживать MSTest в VSCode?
В версии 1.17.2 VSCode (с установленным расширением C#) я добавил проект MSTest в папку решения через dotnet new mstest
и добавил ссылку на тестируемую сборку с dotnet add <project_path>
,
Учитывая две нижеприведенные задачи VSCode, я могу успешно построить и запустить тесты; т.е. все строит, юнит тесты запускаются и проходят.
{
"version": "2.0.0",
"tasks": [
{
"taskName": "build",
"command": "dotnet build src/tests/tests.csproj",
"type": "shell",
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
},
{
"taskName": "test",
"command": "dotnet test src/tests/tests.csproj",
"type": "shell",
"group": {
"kind": "test",
"isDefault": true
},
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
}
]
}
Однако я не могу достичь контрольных точек или иным образом пройти модульное тестирование с помощью встроенного отладчика. Самая близкая конфигурация запуска, с которой я столкнулся, будет запускать тесты, но отладчик не достигает точек останова и не привязывается ни к чему.
{
"name": "test",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "dotnet",
"args": ["test"],
"cwd": "${workspaceRoot}/src/tests",
"stopAtEntry": true,
"console": "internalConsole"
}
Я могу упустить что-то фундаментальное, но как запустить или подключить отладчик vscode C# к модульному тесту MSTest?
1 ответ
В отсутствие более элегантного решения я закончил тем, что сделал это:
Создать launchMsTestAndWaitForDebugger.bat
файл с этим:
set VSTEST_HOST_DEBUG=1
dotnet test Path\\To.Your\\Tests.csproj
Это запустит dotnet test
и подождите, пока отладчик не будет подключен. Запустив его, вы также увидите идентификатор процесса, который поможет позже.
Starting test execution, please wait...
Host debugging is enabled. Please attach debugger to testhost process to continue.
Process Id: 13292, Name: dotnet
Затем я создал задачу в tasks.json для запуска этого.bat-файла:
{
"label": "Start MS Test",
"type": "shell",
"isBackground": true,
"command": "${cwd}\\Path\\To.Your\\launchMsTestAndWaitForDebugger.bat",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
"problemMatcher": []
}
Итак, теперь мы можем запустить дотнет-тест и ждать отладчик, отлично. Убедитесь, что у вас есть запись в файле launch.json для присоединения к процессу:
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
Сейчас ctrl+shift+p
и запустить Start MS Test
задача. Ищите processid в выходных данных. Запустите с помощью .NET Core Attach
определение, выберите правильный процесс и нажмите кнопку воспроизведения. Вуаля: