如何将.NET 6 Minimal API排除在代码覆盖率统计范围外?
解决方案
你可以通过以下两种常用方式实现排除代码覆盖率统计的需求:
方式1:排除整个程序集(适配参考实现项目全量排除的场景)
直接在Program.cs文件的最顶部添加程序集级别的ExcludeFromCodeCoverage属性即可,修改后的代码如下:
[assembly: System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage] using Microsoft.AspNetCore.Mvc; using SharedDataLayer.Repositories; var builder = WebApplication.CreateBuilder(args); builder.Services.AddSingleton<PaymentRepository>(); var app = builder.Build(); app.MapGet("/Payments", ([FromServices] PaymentRepository repo) => { return repo.GetPayments(); }); app.Run();
这种方式会将当前项目的所有代码都排除在代码覆盖率统计之外,和你之前其他参考实现的排除效果完全一致,非常适合参考项目整体不需要统计覆盖率的场景。
方式2:仅排除隐式生成的Program类
如果你只想排除顶级语句对应的隐式Program类、不想影响项目内其他可能存在的类的覆盖率统计,可以在Program.cs文件的末尾添加partial类声明并标记属性,代码示例:
using Microsoft.AspNetCore.Mvc; using SharedDataLayer.Repositories; var builder = WebApplication.CreateBuilder(args); builder.Services.AddSingleton<PaymentRepository>(); var app = builder.Build(); app.MapGet("/Payments", ([FromServices] PaymentRepository repo) => { return repo.GetPayments(); }); app.Run(); [System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage] public partial class Program { }
这种方式的原理是.NET 6+顶级语句编译时会自动生成隐式的Program类,我们手动声明同名partial类附加属性,就能实现对整个顶级语句代码的排除。
内容的提问来源于stack exchange,提问作者Tolvic
相关产品推荐
相关产品推荐

