如何在 Visual Studio 中调试自定义测试适配器
How do I debug a custom test adapter in Visual Studio
我正在为 Visual Studio 2017 开发自定义测试适配器。如何配置 Visual Studio 来调试测试适配器,而不必使用 hack,例如在中添加 Debugger.Launch()
我的适配器代码?
Microsoft 子进程调试强大工具
安装由 Microsoft 员工创建的 Microsoft Child Process Debugging Power Tool。这允许您配置 Visual Studio 调试器以附加到子进程(这就是 vstest.console.exe 执行测试的方式)
安装后,打开您的解决方案并启用子进程调试:
1) 在以下 Visual Studio 菜单位置转到子进程调试设置:Debug -> Other Debug Targets -> Child Process Debugging Settings...
2)启用子进程调试:true
和Save
3) 可选地使用下拉列表保留设置,以便可以将此设置签入源代码管理
如果您选择保留设置,您的设置文件可能如下所示:
<?xml version="1.0" encoding="utf-8"?>
<!-- EngineFilter Guid was found here: https://blogs.msdn.microsoft.com/martintracy/2006/05/16/debug-engine-guids/ -->
<ChildProcessDebuggingSettings IsEnabled="true" xmlns="http://schemas.microsoft.com/vstudio/ChildProcessDebuggingSettings/2014">
<DefaultRule Attach="false" />
<Rule IsEnabled="true" ProcessName="TE.ProcessHost.Managed.exe" EngineFilter="{92ef0900-2251-11d2-b72e-0000f87572ef}" />
<Rule IsEnabled="true" ProcessName="vstest.discoveryengine.exe" EngineFilter="{92ef0900-2251-11d2-b72e-0000f87572ef}" />
<Rule IsEnabled="true" ProcessName="vstest.discoveryengine.x86.exe" EngineFilter="{92ef0900-2251-11d2-b72e-0000f87572ef}" />
<Rule IsEnabled="true" ProcessName="vstest.executionengine.exe" EngineFilter="{92ef0900-2251-11d2-b72e-0000f87572ef}" />
<Rule IsEnabled="true" ProcessName="vstest.executionengine.x86.exe" EngineFilter="{92ef0900-2251-11d2-b72e-0000f87572ef}" />
</ChildProcessDebuggingSettings>
设置完成后,您只需确保您的项目已设置为使用 vstest.console.exe 进行调试。这里的关键点是确保启用 native/unmanaged 调试,否则子进程调试工具将无法工作。
新的 csproj 系统
编辑或创建一个 launchSettings.json
文件,使其看起来类似于:
{
"profiles": {
"DebugTestAdapter": {
"commandName": "Executable",
"executablePath": "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\TestPlatform\vstest.console.exe",
"commandLineArgs": "Tests.dll --ListTests --TestAdapterPath:.",
"workingDirectory": "C:\Projects\TestAdapter\Tests\bin\Debug\net46"
}
}
}
修改您的 csproj 文件以包含以下内容 属性,从而启用本机调试:
<PropertyGroup>
<EnableUnmanagedDebugging>true</EnableUnmanagedDebugging>
</PropertyGroup>
旧的 csproj 系统
在项目的调试属性页面中,进行以下设置:
启动外部程序:
C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\Common7\IDE\Extensions\TestPlatform\vstest.console.exe
命令行参数:
Tests.dll --ListTests --TestAdapterPath:.
工作目录:
C:\Projects\TestAdapter\Tests\bin\Debug
启用本机代码调试:
将此值设置为 true
我正在为 Visual Studio 2017 开发自定义测试适配器。如何配置 Visual Studio 来调试测试适配器,而不必使用 hack,例如在中添加 Debugger.Launch()
我的适配器代码?
Microsoft 子进程调试强大工具
安装由 Microsoft 员工创建的 Microsoft Child Process Debugging Power Tool。这允许您配置 Visual Studio 调试器以附加到子进程(这就是 vstest.console.exe 执行测试的方式)
安装后,打开您的解决方案并启用子进程调试:
1) 在以下 Visual Studio 菜单位置转到子进程调试设置:Debug -> Other Debug Targets -> Child Process Debugging Settings...
2)启用子进程调试:true
和Save
3) 可选地使用下拉列表保留设置,以便可以将此设置签入源代码管理
如果您选择保留设置,您的设置文件可能如下所示:
<?xml version="1.0" encoding="utf-8"?>
<!-- EngineFilter Guid was found here: https://blogs.msdn.microsoft.com/martintracy/2006/05/16/debug-engine-guids/ -->
<ChildProcessDebuggingSettings IsEnabled="true" xmlns="http://schemas.microsoft.com/vstudio/ChildProcessDebuggingSettings/2014">
<DefaultRule Attach="false" />
<Rule IsEnabled="true" ProcessName="TE.ProcessHost.Managed.exe" EngineFilter="{92ef0900-2251-11d2-b72e-0000f87572ef}" />
<Rule IsEnabled="true" ProcessName="vstest.discoveryengine.exe" EngineFilter="{92ef0900-2251-11d2-b72e-0000f87572ef}" />
<Rule IsEnabled="true" ProcessName="vstest.discoveryengine.x86.exe" EngineFilter="{92ef0900-2251-11d2-b72e-0000f87572ef}" />
<Rule IsEnabled="true" ProcessName="vstest.executionengine.exe" EngineFilter="{92ef0900-2251-11d2-b72e-0000f87572ef}" />
<Rule IsEnabled="true" ProcessName="vstest.executionengine.x86.exe" EngineFilter="{92ef0900-2251-11d2-b72e-0000f87572ef}" />
</ChildProcessDebuggingSettings>
设置完成后,您只需确保您的项目已设置为使用 vstest.console.exe 进行调试。这里的关键点是确保启用 native/unmanaged 调试,否则子进程调试工具将无法工作。
新的 csproj 系统
编辑或创建一个 launchSettings.json
文件,使其看起来类似于:
{
"profiles": {
"DebugTestAdapter": {
"commandName": "Executable",
"executablePath": "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\TestPlatform\vstest.console.exe",
"commandLineArgs": "Tests.dll --ListTests --TestAdapterPath:.",
"workingDirectory": "C:\Projects\TestAdapter\Tests\bin\Debug\net46"
}
}
}
修改您的 csproj 文件以包含以下内容 属性,从而启用本机调试:
<PropertyGroup>
<EnableUnmanagedDebugging>true</EnableUnmanagedDebugging>
</PropertyGroup>
旧的 csproj 系统
在项目的调试属性页面中,进行以下设置:
启动外部程序:
C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\Common7\IDE\Extensions\TestPlatform\vstest.console.exe
命令行参数:
Tests.dll --ListTests --TestAdapterPath:.
工作目录:
C:\Projects\TestAdapter\Tests\bin\Debug
启用本机代码调试:
将此值设置为 true