6

我很容易配置为在 Azure DevOps 中获取.NET Core项目的覆盖结果,但项目没有运气.NET Framework
所以,我会很感激能得到这方面的建议,因为 Coverlet 文档清楚地表明我们也可以将它用于.NET Framework项目。这个问题有点像我的,但我没有看到任何答案, 你能用 Coverlet 在 .NET Framework 项目中获取代码覆盖率数据吗?

4

2 回答 2

4

最后,我找到了一个更简单的解决方案。这里是,

  • <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 的文档

希望这对最终登陆这里的人有所帮助。

于 2020-03-18T14:43:19.813 回答
0

是的,您可以对来自 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”

于 2020-03-17T09:10:00.003 回答