如何为使用SpecFlow编写单元测试的.NET Core WebAPI项目执行代码覆盖率检测
.NET Core WebAPI + SpecFlow(MSTest) 项目代码覆盖率检测操作步骤
1. 安装必要依赖
首先在你的SpecFlow测试项目中安装所需的NuGet包,可直接在测试项目目录下执行以下CLI命令完成安装:
- 安装覆盖率数据采集工具:
dotnet add package coverlet.collector - 安装可视化报告生成工具:
dotnet add package ReportGenerator
2. 配置覆盖率过滤规则(可选)
如果你需要排除测试代码、第三方依赖、自动生成代码等不需要统计的内容,可在测试项目根目录新建coverlet.runsettings配置文件,示例内容如下:
<?xml version="1.0" encoding="utf-8" ?> <RunSettings> <DataCollectionRunSettings> <DataCollectors> <DataCollector friendlyName="XPlat code coverage"> <Configuration> <!-- 仅统计目标WebAPI项目的代码,替换为你实际的WebAPI程序集名称 --> <Include>[YourWebApiProjectName]*</Include> <!-- 排除测试项目、SpecFlow相关项目 --> <Exclude>[*Tests]*,[*.Specs]*</Exclude> <!-- 排除标记了自动生成特性的代码 --> <ExcludeByAttribute>GeneratedCodeAttribute</ExcludeByAttribute> <!-- 排除指定目录/文件,比如EF迁移文件、启动入口文件等 --> <ExcludeByFile>**/Migrations/*,**/Program.cs</ExcludeByFile> </Configuration> </DataCollector> </DataCollectors> </DataCollectionRunSettings> </RunSettings>
注意:配置中的YourWebApiProjectName需要替换为你实际的WebAPI项目的程序集名称
3. 执行测试并采集覆盖率数据
在测试项目目录下打开终端,执行对应命令:
- 如果你使用了自定义的runsettings配置:
dotnet test --collect:"XPlat Code Coverage" --settings coverlet.runsettings - 不需要自定义规则可直接执行:
dotnet test --collect:"XPlat Code Coverage"
命令执行完成后,会在测试项目的TestResults目录下生成一个随机GUID命名的子文件夹,里面的coverage.cobertura.xml就是原始覆盖率数据文件。
4. 生成可视化HTML报告
首先全局安装ReportGenerator命令行工具(如果之前没装过):dotnet tool install -g dotnet-reportgenerator-globaltool
然后执行报告生成命令,注意替换命令中的{xml文件路径}为上一步生成的coverage.cobertura.xml的实际本地路径:reportgenerator -reports:"{xml文件路径}" -targetdir:"CoverageReport" -reporttypes:Html
5. 查看覆盖率结果
打开生成的CoverageReport目录,双击index.html即可在浏览器中查看完整的覆盖率统计数据,支持按命名空间、类、方法维度查看,未覆盖的代码行会做明确标记。
内容的提问来源于stack exchange,提问作者Abi Reddy
相关产品推荐
相关产品推荐

