如何自动将所有migrations排除在代码覆盖率分析范围外
自动排除Migrations文件代码覆盖率的配置方案
以下是主流.NET代码覆盖率工具的通用配置方案,无需手动给每个Migration类添加[ExcludeFromCodeCoverage]特性:
Coverlet(跨平台.NET覆盖率工具)
命令行参数方式
执行测试时直接添加排除规则参数:
dotnet test /p:CollectCoverage=true /p:Exclude="[*]*.Migrations.*"
规则说明:[程序集匹配规则]命名空间匹配规则,上述规则会匹配所有程序集下所有Migrations命名空间下的所有类型。
配置文件方式
在项目根目录创建coverlet.runsettings配置文件,内容如下:
<?xml version="1.0" encoding="utf-8" ?> <RunSettings> <DataCollectionRunSettings> <DataCollectors> <DataCollector friendlyName="XPlat code coverage"> <Configuration> <!-- 可添加多条<Exclude>节点适配不同匹配规则 --> <Exclude>[*]*.Migrations.*</Exclude> <!-- 如果要按文件路径匹配可以用下面的规则 --> <!-- <ExcludeByFile>**/Migrations/*.cs</ExcludeByFile> --> </Configuration> </DataCollector> </DataCollectors> </DataCollectionRunSettings> </RunSettings>
测试时指定配置文件即可:
dotnet test --settings coverlet.runsettings
Visual Studio 自带代码覆盖率工具
同样通过runsettings文件配置,在配置文件中添加如下节点:
<DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0"> <Configuration> <Functions> <Exclude> <!-- 按命名空间匹配排除所有Migrations相关类 --> <Function>^.*\.Migrations\..*$</Function> </Exclude> </Functions> </Configuration> </DataCollector>
OpenCover 工具配置
执行测试时添加排除参数即可:
# 按命名空间排除 OpenCover.Console.exe -target:"dotnet.exe" -targetargs:"test" -excludebyattribute:"*.Migrations.*" -output:coverage.xml # 按文件路径排除 OpenCover.Console.exe -target:"dotnet.exe" -targetargs:"test" -excludebyfile:"*Migrations/*.cs" -output:coverage.xml
你可以根据自己项目的命名规则、文件目录结构调整匹配规则,实现全局一次性生效。
内容的提问来源于stack exchange,提问作者Elder Barbosa Lima
相关产品推荐
相关产品推荐

