排除ef核心迁移文件的代码覆盖范围



我想从代码覆盖率计算中排除所有自动生成的迁移文件。我无法更改构建管道中的dotnet test命令,所以我想我唯一的朋友是[ExcludeFromCodeCoverage]属性。

棘手的是,每次我添加新的迁移时,我都需要手动检查所有生成的文件,并确保我在所有生成的类上都有[ExcludeFromCodeCoverage]属性,这很好,但我想知道有没有更好的解决方案可以一劳永逸地完成?

迁移文件

[ExcludeFromCodeCoverage] // Manually added everytime
partial class Initial : Migration

和ModelSnapshot文件

[ExcludeFromCodeCoverage] // This gets removed everytime snapshot is updated
[DbContext(typeof(MyContext))]
partial class MyContextModelSnapshot : ModelSnapshot

对于快照文件,由于类名总是相同的,我可以创建一个单独的文件MyContextModelSnapshot.CodeCoverage.cs文件,并将属性放在分部类上,但有迁移文件的解决方案吗?

如果重要的话,我正在与coverlet.msbuild合作。

首先要确保问题不是检测到.runsettings文件。

显然,对于CCD_ 6/"不起作用。所以你应该使用完整的路径(我无法使用它(

【参考本文】https://alexanderontesting.com/2019/03/12/applying-a-runsettings-file-file-from-the-command-line-in-net-core/

但如果你使用的是床罩。

您可以使用参数excludeByFile

如果我尝试使用.runsettings文件(相对路径(运行

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector friendlyName="XPlat code coverage">
<Configuration>
<Format>cobertura</Format>                              
<ExcludeByFile>"**/*Migrations/*.cs"</ExcludeByFile>       
</Configuration>
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>

使用-s参数使用.runsettings文件

dotnet测试/p:CollectCoverage=true-s。\coverlet.runsettings

结果不是排除的(由于迁移文件,1%的线路覆盖率(

+---------+------+--------+--------+
|         | Line | Branch | Method |
+---------+------+--------+--------+
| Total   | 1.3% | 25.03% | 23.93% |
+---------+------+--------+--------+
| Average | 1.3% | 25.03% | 23.93% |
+---------+------+--------+--------+

但是如果我从命令行添加参数(像这样(

dotnet test /p:CollectCoverage=true /p:ExcludeByFile="**/*Migrations/*.cs"

结果是预期的(38%的线路覆盖率(

+---------+--------+--------+--------+
|         | Line   | Branch | Method |
+---------+--------+--------+--------+
| Total   | 38.83% | 25.03% | 27.24% |
+---------+--------+--------+--------+
| Average | 38.83% | 25.03% | 27.24% |
+---------+--------+--------+--------+

可用的参数将取决于您的测试工具(对于coverlet,您可以参考(:

https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/VSTestIntegration.md

希望这能帮助

最新更新