You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调试VS2022中自定义开发的vstest Adapter代码

自定义vstest适配器断点调试方法

问题相关信息

  • 自研vstest适配器已接入Visual Studio 2022,测试资源管理器可正常显示创建的虚拟测试用例,但无法进入适配器内部代码触发断点
  • 测试发现逻辑代码:
[DefaultExecutorUri("executor://XmlTestExecutor")]
class TestDiscoverer : ITestDiscoverer
{
    void ITestDiscoverer.DiscoverTests(IEnumerable<string> containers, IDiscoveryContext discoveryContext,
      IMessageLogger logger, ITestCaseDiscoverySink discoverySink)
    {
        logger.SendMessage(TestMessageLevel.Informational, "Start discovery");

        var test = new TestCase(
                       "Assembly.Class.Method",
                       new Uri("discoverer://compatTestDiscoverer"),
                       @"D:\Code\HelloTestUnit\bin\Debug\net6.0\HelloTestUnit.dll");
        test.DisplayName = "Sample test case";
        test.CodeFilePath = @"D:\Code\HelloTestUnit\UnitTestA.cs";
        discoverySink.SendTestCase(test);
    }
}
  • 之前尝试使用vstest.console.exe调试的命令存在参数错误,导致适配器无法加载:
set VSTEST_RUNNER_DEBUG=1
set VSTEST_HOST_DEBUG=1
vstest.console.exe HelloTestUnit.dll /ResultsDirectory:d:\test /TestAdapterPath:VS.TestAdapter.dll

调试操作步骤

方法一:附加VS测试进程(适配测试资源管理器场景)

测试资源管理器执行测试发现、用例运行时,不会直接在主VS进程加载适配器,也不会固定使用单一vstest.console进程,按以下步骤操作:

  • 将适配器项目编译输出的dll、pdb文件,复制到测试项目输出目录下的TestAdapters文件夹,或者复制到全局vstest扩展目录,确保VS能加载到最新编译的适配器版本
  • 打开测试资源管理器,手动触发一次测试发现,确认虚拟测试用例正常显示
  • 打开VS菜单「调试-附加到进程」,筛选对应进程附加:
    • .NET Framework测试场景:附加vstest.discoveryengine.exe、vstest.executionengine.exe进程
    • .NET Core/.NET 6+测试场景:附加testhost.exe、vstest.console.exe及其子dotnet进程
  • 附加时代码类型选择对应版本的托管代码,之后在适配器代码中设置的断点即可正常命中。

方法二:修正命令行参数,通过vstest.console调试

原命令存在两处错误:

  • /TestAdapterPath参数仅接受文件夹路径,传入具体dll路径会导致适配器扫描失败
  • 未切换到测试项目输出目录执行命令,可能出现测试dll找不到的问题
    修正后的命令如下:
:: 配置vstest运行器启动时暂停,等待调试器附加
set VSTEST_RUNNER_DEBUG=1
:: 仅调试测试发现逻辑时不需要配置该变量,调试用例执行逻辑时再加
set VSTEST_HOST_DEBUG=1
:: 切换到测试项目编译输出目录
cd /d D:\Code\HelloTestUnit\bin\Debug\net6.0\
:: 传入适配器dll所在的文件夹路径,不要传dll文件名
vstest.console.exe HelloTestUnit.dll /TestAdapterPath:"你的适配器dll所在的文件夹完整路径"

执行命令后会弹出调试器选择提示,打开适配器项目附加到对应等待进程,即可命中DiscoverTests方法内的断点。

注意事项

  • 适配器项目的平台目标必须和测试项目保持一致(同为x86/x64/Any CPU),否则vstest会因平台不匹配跳过适配器加载
  • 适配器项目需配置生成全量PDB调试文件,否则断点无法绑定
  • 若测试资源管理器加载了旧版本适配器,关闭所有VS实例,删除%TEMP%\VisualStudioTestExplorerExtensions目录下的缓存文件后重启VS即可

内容的提问来源于stack exchange,提问作者ever

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 07:39:21