首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能在Azure DevOps中使用coverlet获得.NET框架项目的代码覆盖率?

是否有可能在Azure DevOps中使用coverlet获得.NET框架项目的代码覆盖率?
EN

Stack Overflow用户
提问于 2020-03-16 13:55:25
回答 2查看 8K关注 0票数 8

我很容易地将其配置为在Azure DevOps中获得.NET Core项目的覆盖结果,但.NET Framework项目没有任何进展。

因此,我将非常感谢在这方面得到建议,因为coverlet文档明确表示,我们也可以将其用于.NET Framework项目。这个问题有点类似于我的问题,但我没有看到任何答案,在.NET框架项目中,可以使用Coverlet获取代码覆盖率数据吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-18 14:43:19

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

  • 在测试项目文件中添加<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)' != ''" /> To,<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的文档。

希望这对那些最终登陆这里的人会有帮助。

票数 4
EN

Stack Overflow用户

发布于 2020-03-17 09:10:00

是的,您可以从ASP.NET项目中编码覆盖率数据。这很简单,就像@riQQ在这条线中建议的那样。

以下内容是为补充和复制@riQQ的答案在上面的线程。

编写了webform应用程序和.net框架单元测试,在repo中添加了coverlet.runsettings文件,内容引用VSTest集成支持的掩护选项

代码语言:javascript
复制
<?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任务:

它可以成功地生成覆盖文件:

代码语言:javascript
复制
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”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60707310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档