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

Azure DevOps .NET SDK中GetTestSuitesForPlanAsync方法突遭废弃无法使用

解决Azure Test Management SDK中GetTestSuitesForPlanAsync废弃且新方法无法调用的问题

问题场景

为QA团队开发测试用例收集脚本,目标是筛选Azure项目中测试结果多为N/A的用例。此前基于测试计划ID的版本运行正常,优化脚本结构时突然报错:

CS0612 'TestCompatHttpClientBase.GetTestSuitesForPlanAsync(string, int, int?, int?, int?, bool?, object, CancellationToken)' is obsolete

尝试调用Azure SDK文档中第三个参数为Nullable<SuiteExpand>的同名重载方法,但即使添加using引用、传入对应类型参数也无法调用,怀疑是微软SDK更新导致的兼容问题。

原因分析

  1. 旧方法属于SDK的兼容层基类TestCompatHttpClientBase,已被微软标记废弃,不再维护
  2. 新的正式方法重载属于TestManagementHttpClient,但如果引用的NuGet包版本过低,会不存在该重载
  3. 代码中存在异步调用不规范问题(用.Result阻塞线程,可能导致异常无法被捕获)

解决方案

1. 更新NuGet依赖包

确保以下NuGet包更新至最新稳定版:

  • Microsoft.TeamFoundationServer.Client
  • Microsoft.VisualStudio.Services.Client

2. 替换为非废弃的方法重载

新的GetTestSuitesForPlanAsync重载签名为:

Task<List<TestSuite>> GetTestSuitesForPlanAsync(string project, int planId, SuiteExpand? expand = null, int? top = null, int? skip = null, object userState = null, CancellationToken cancellationToken = default);

3. 修复异步调用的死锁问题

原代码中使用.Result阻塞异步方法,会导致异常无法被catch块捕获,需替换为await。

修改后的完整代码示例

using HtmlAgilityPack;
using Microsoft.TeamFoundation.TestManagement.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
using System.Text.RegularExpressions;
using System.Threading;

static internal async Task<List<TestCaseResult>> collectTestCaseResultsByPlan(TestManagementHttpClient client, WorkItem plan)
{
    // Azure测试结构:plan > suite > case > results/runs
    List<TestCaseResult> results = new List<TestCaseResult>();
    string projectName = "[REDACTED]";
    try
    {
        // 替换为非废弃的方法重载,使用默认可选参数
        List<TestSuite> suites = await client.GetTestSuitesForPlanAsync(projectName, (int)plan.Id, cancellationToken: CancellationToken.None);
        
        foreach (var suite in suites)
        {
            List<SuiteTestCase> cases = await client.GetTestCasesAsync(projectName, (int)plan.Id, suite.Id);
            foreach (var testCase in cases)
            {
                var testQuery = new TestResultsQuery
                {
                    ResultsFilter = new ResultsFilter
                    {
                        TestCaseId = Convert.ToInt32(testCase.Workitem.Id),
                        AutomatedTestName = "test" // 保留原注释
                    }
                };
                // 替换.Result为await,避免死锁和异常丢失
                TestCaseResult caseQuery = await client.GetTestResultsByQueryAsync(testQuery, projectName);
                results.AddRange(caseQuery.Results);
            }
        }
    }
    catch (Exception e)
    {
        Console.WriteLine($"捕获异常:{e.Message}\n堆栈跟踪:{e.StackTrace}");
    }
    return results;
}

额外排查点

如果仍无法调用新方法:

  • 检查命名空间:确保using Microsoft.TeamFoundation.TestManagement.WebApi;已正确引用
  • 清理项目缓存:删除bin/obj目录,重新生成项目
  • 确认SDK版本:在NuGet包管理器中查看Microsoft.TeamFoundationServer.Client的版本,需至少是16.170.0及以上版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:45:34