拓冰建站拓冰建站
首页 / 资讯中心 / 正文

StarWars代码覆盖率与持续集成:OpenCover、ReportGenerator与VSTS配置全记录

StarWars代码覆盖率与持续集成OpenCover、ReportGenerator与VSTS配置全记录【免费下载链接】StarWarsGraphQL Star Wars example using GraphQL for .NET, ASP.NET Core, Entity Framework Core项目地址: https://gitcode.com/gh_mirrors/st/StarWarsStarWars 是一个基于 GraphQL for .NET、ASP.NET Core 与 Entity Framework Core 构建的 GraphQL 示例项目采用 Api / Core / Data 三层架构。本文完整记录它如何用 OpenCover 采集代码覆盖率、用 ReportGenerator 生成 HTML 报告并在 VSTSVisual Studio Team Services上配置持续集成让每次代码提交都自动构建并跑完全部测试。项目结构两套测试两条覆盖率流水线项目由 4 个核心工程组成工程职责StarWars.ApiASP.NET Core 的 GraphQL 控制器与 SchemaStarWars.Core领域模型、仓储接口与业务逻辑StarWars.DataEF Core 仓储实现与内存仓储Tests单元测试 集成测试两套工程覆盖率脚本与测试一一对应放在仓库根目录unit-tests.bat—— 针对 StarWars.Tests.Unit 的单元测试覆盖率integration-tests.bat—— 针对 StarWars.Tests.Integration 的集成测试覆盖率两个脚本共用同一套命令行参数只是测试工程与输出目录不同这正是一份配置、两类结果的极简做法。一键覆盖率脚本unit-tests.bat 逐行拆解打开根目录的unit-tests.bat整个流水线只有 4 行mkdir coverage\unit OpenCover.Console.exe -target:dotnet.exe -targetargs:test -f netcoreapp1.1 -c Release Tests/StarWars.Tests.Unit/StarWars.Tests.Unit.csproj -hideskipped:File -output:coverage/unit/coverage.xml -oldStyle -filter:[StarWars*]* -[StarWars.Tests*]* -[StarWars.Api]*Program -[StarWars.Api]*Startup -[StarWars.Data]*EntityFramework.Workaround.Program -[StarWars.Data]*EntityFramework.Migrations* -[StarWars.Data]*EntityFramework.Seed* -searchdirs:Tests/StarWars.Tests.Unit/bin/Release/netcoreapp1.1 -register:user ReportGenerator.exe -reports:coverage/unit/coverage.xml -targetdir:coverage/unit -verbosity:Error start .\coverage\unit\index.htm各参数的作用如下参数作用-target:dotnet.exe让 OpenCover 包裹执行dotnet test边跑测试边采集覆盖率-output:coverage/unit/coverage.xml覆盖率原始数据XML输出位置-hideskipped:File隐藏无法映射到源文件的程序集避免报告出现Unknown file噪声-filter[StarWars*]*纳入所有 StarWars 程序集-前缀排除测试工程、Program/Startup、EF 迁移与种子数据等无需统计的代码-searchdirs指定编译产物DLL 与 PDB所在目录覆盖率靠 PDB 与源码对齐-register:user将程序集注册到用户级 CLR 注册表规避强名称加载问题-oldStyle生成旧版 XML 格式保证 ReportGenerator 兼容最后一条ReportGenerator.exe把 XML 转成 HTML 报告start命令直接帮你打开index.htm——从运行到看报告一条命令链完成。关键前置条件DebugType 必须为 FullOpenCover 依赖 PDB 文件把覆盖率数据对齐到源码行号而默认生成的 PDB 可能不完整。所以三个核心工程都在 csproj 中显式写入了DebugTypeFull/DebugType你可以在 StarWars.Api.csproj、StarWars.Core.csproj、StarWars.Data.csproj 中确认这一配置。另外两个前置步骤安装OpenCover与ReportGenerator两个 NuGet 包测试工程 StarWars.Tests.Unit.csproj 中已引用OpenCover 4.6.519和ReportGenerator 2.5.6把 OpenCover 的 tools 目录加入系统Path环境变量例如C:\Users\你/.nuget/packages/opencover/4.6.519/tools/之后命令行才能直接调用OpenCover.Console.exe。ReportGenerator从 XML 到可视化 HTML 报告OpenCover 产出的 XML 机器可读但不便阅读ReportGenerator.exe一步将其渲染成带行级高亮的 HTML 站点-reports:coverage/unit/coverage.xml输入 XML-targetdir:coverage/unit输出目录-verbosity:Error安静模式出错才输出执行完毕后浏览器自动打开index.htm可逐文件查看哪些行被执行、哪些行被跳过快速定位覆盖盲区。✅VSTS 持续集成8 步搭建指南本地脚本之外项目在 VSTS 上配置了持续集成提交即自动构建、测试。完整步骤创建 VSTS 项目在 VSTS 中新建一个项目作为团队容器创建构建定义选择 ASP.NET Core Preview 模板勾选 GitHub 来源、Hosted VS2017 默认代理队列和 Continuous Integration 触发添加 GitHub 服务连接让 VSTS 有权拉取你的仓库设置仓库在构建定义中指定仓库与分支切换 New Build Editor使用新版可视化构建编辑器编排任务设置构建步骤添加 .NET Core 还原、构建、测试任务Test 步骤指定测试工程注意用分号分隔两个 csproj**/Tests/StarWars.Tests.Unit/StarWars.Tests.Unit.csproj;**/Tests/StarWars.Tests.Integration/StarWars.Tests.Integration.csproj排队一次构建确认构建成功且单元、集成测试全部通过后开启 Build Badge把构建状态徽章挂到 README 顶部。新手常见问题速查报告里全是 Unknown file没开DebugTypeFull/DebugType或-searchdirs指向的目录与测试输出的 bin 目录不一致。为什么排除 Program / Startup / Migrations / Seed这些是启动入口与基础设施代码统计它们只会拉低业务代码覆盖率的信噪比-filter的-前缀就是干这个的。单元和集成覆盖率放哪看互不干扰coverage/unit与coverage/integration各出一份 HTML 报告。CI 上没跑我的测试检查 Test 步骤的 csproj 通配路径是否与仓库实际路径一致。小结StarWars 用两条 4 行的 bat 脚本就搭好了OpenCover 采集 ReportGenerator 报告的覆盖率流水线再叠加 VSTS 持续集成实现了提交即验证的闭环。整套方案不引入任何重型工具链参数全部透明可控非常适合作为 .NET Core 项目落地代码覆盖率与 CI 的参考模板。【免费下载链接】StarWarsGraphQL Star Wars example using GraphQL for .NET, ASP.NET Core, Entity Framework Core项目地址: https://gitcode.com/gh_mirrors/st/StarWars创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门