我很容易配置为在 Azure DevOps 中获取.NET Core
项目的覆盖结果,但项目没有运气.NET Framework
。
所以,我会很感激能得到这方面的建议,因为 Coverlet 文档清楚地表明我们也可以将它用于.NET Framework
项目。这个问题有点像我的,但我没有看到任何答案,
你能用 Coverlet 在 .NET Framework 项目中获取代码覆盖率数据吗?
2 回答
最后,我找到了一个更简单的解决方案。这里是,
<IsTestProject>true</IsTestProject
在测试项目文件中添加>。dotnet test/dotnet test /p:CollectCoverage=true
在测试项目位置(存在 TestProject.csproj)运行推荐运行命令后可能会出现以下错误,
未找到导入的项目“C:\Program Files\dotnet\sdk\3.1.100\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets”。
在项目文件(您要对其进行单元测试并获得代码覆盖率)中,更改以下 Import 语句
这,
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
到,
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
这对我本地和 Azure DevOps 都有效。
注意:不要忘记在您的测试项目中安装 Coverlet.msbuild。
更新:
仅当您没有收到“.Microsoft.WebApplication.targets 未找到”错误时,上述方法才有效。评论建议的导入语句将使发布最终失败,这是显而易见的。所以,我最终使用了 Coverlet.Console,它运行顺利,没有任何错误。但是,要使用coverlet.console,我需要TestProject.dll
文件而不是项目文件(.csproj);所以我不得不为测试项目添加额外的构建任务。这是如何安装和使用 Coverlet.console 的文档
希望这对最终登陆这里的人有所帮助。
是的,您可以对来自 ASP.NET 项目的覆盖率数据进行编码。正如@riQQ 在此线程中建议的那样简单。
以下内容为补充,并在上述线程中复制@riQQ的答案。
准备了一个 webform 应用程序和 .net 框架单元测试,coverlet.runsettings
在 repo 中添加了文件,内容引用了 VSTest 集成支持的 Coverlet 选项:
<?xml version="1.0" encoding="utf-8" ?>
<RunSettings>
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector friendlyName="XPlat code coverage">
<Configuration>
<Format>json,cobertura</Format>
<Exclude>[coverlet.*.tests?]*,[*]Coverlet.Core*</Exclude> <!-- [Assembly-Filter]Type-Filter -->
<Include>[coverlet.*]*,[*]Coverlet.Core*</Include> <!-- [Assembly-Filter]Type-Filter -->
<ExcludeByAttribute>Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute</ExcludeByAttribute>
<ExcludeByFile>../dir1/class1.cs,../dir2/*.cs,../dir3/**/*.cs,</ExcludeByFile> <!-- Absolute or relative file paths -->
<IncludeDirectory>../dir1/,../dir2/,</IncludeDirectory>
<SingleHit>false</SingleHit>
<UseSourceLink>true</UseSourceLink>
<IncludeTestAssembly>true</IncludeTestAssembly>
</Configuration>
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>
配置 VSTest 任务:
它可以成功生成覆盖文件:
Passed TestMethod1
Results File: D:\a\_temp\TestResults\VssAdministrator_fv-az38_2020-03-17_07_53_28.trx
Attachments:
D:\a\_temp\TestResults\*******-****-****-****-**********\VssAdministrator_fv-az38 2020-03-17 07_53_18.coverage
Total tests: 1. Passed: 1. Failed: 0. Skipped: 0.
Test Run Successful.
注意:如果您想在自托管代理上运行此构建,您可能需要确保已安装 VS Enterprise,请参阅自托管代理上的“找不到 CodeCoverage.exe”。