我想从代码覆盖率计算中排除所有自动生成的迁移文件。我无法更改构建管道中的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
希望这能帮助