如何基于C#项目代码覆盖率自动生成ADO用户故事?求工具及开发可行性
基于C#代码覆盖率未覆盖类自动创建Azure DevOps用户故事的工具与开发可行性
现有工具情况
目前没有直接开箱即用的工具能完全匹配你描述的端到端流程——从C#项目代码覆盖率检测到自动生成Azure DevOps用户故事。不过可以通过组合现有工具实现近似效果:
- 用
dotnet test配合自定义.runsettings文件生成代码覆盖率报告(支持导出为XML/JSON格式) - 借助Azure DevOps的REST API或官方.NET SDK(
Microsoft.TeamFoundationServer.Client)编写脚本,解析覆盖率报告里的未覆盖类,批量创建用户故事
自行开发的可行性
完全可行,以下是核心步骤的实现思路:
配置代码覆盖率
- 编写
.runsettings文件,指定要检测的程序集、排除项等规则,示例片段:<RunSettings> <DataCollectionRunSettings> <DataCollectors> <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <Configuration> <CodeCoverage> <ModulePaths> <Include> <ModulePath>.*YourProject\.dll$</ModulePath> </Include> </ModulePaths> </CodeCoverage> </Configuration> </DataCollector> </DataCollectors> </DataCollectionRunSettings> </RunSettings> - 执行
dotnet test --settings YourSettings.runsettings --collect:"XPlat Code Coverage"生成覆盖率报告(默认在TestResults目录下的XML文件)
- 编写
解析覆盖率报告
- 读取XML格式的覆盖率报告,筛选出覆盖率为0%的类(或根据你的需求定义“待覆盖”规则)。可以用
System.Xml.Linq或第三方库(如Coverlet.Core)简化解析逻辑。
- 读取XML格式的覆盖率报告,筛选出覆盖率为0%的类(或根据你的需求定义“待覆盖”规则)。可以用
调用Azure DevOps API创建用户故事
- 使用Azure DevOps的工作项创建API,通过HTTP请求或官方SDK提交工作项。示例用SDK的核心代码片段:
using Microsoft.TeamFoundation.WorkItemTracking.WebApi; using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models; using Microsoft.VisualStudio.Services.Common; var connection = new VssConnection(new Uri("https://dev.azure.com/YourOrg"), new VssBasicCredential("", "YourPAT")); var workItemClient = connection.GetClient<WorkItemTrackingHttpClient>(); var workItemCreate = new JsonPatchDocument(); workItemCreate.Add(new JsonPatchOperation() { Operation = Operation.Add, Path = "/fields/System.Title", Value = $"编写单元测试覆盖类:{unCoveredClassName}" }); workItemCreate.Add(new JsonPatchOperation() { Operation = Operation.Add, Path = "/fields/System.WorkItemType", Value = "User Story" }); // 可添加其他字段描述,如Area Path、Iteration Path等 await workItemClient.CreateWorkItemAsync(workItemCreate, "YourProject", "User Story");
- 使用Azure DevOps的工作项创建API,通过HTTP请求或官方SDK提交工作项。示例用SDK的核心代码片段:
整合流程
- 将上述步骤封装成控制台应用或Azure DevOps Pipeline任务,实现一键触发:配置runsettings → 执行覆盖率检测 → 解析并生成用户故事。
注意事项
- 需要确保Azure DevOps的个人访问令牌(PAT)拥有创建工作项的权限
- 可根据实际需求调整“待覆盖类”的判定规则(比如不是完全0覆盖率,而是低于某个阈值的类)
- 批量创建工作项时建议添加去重逻辑,避免重复生成相同的用户故事
内容的提问来源于stack exchange,提问作者Chukchak
相关产品推荐
相关产品推荐

