.NET Core 2.0的代码覆盖率

时间:2018-03-22 10:28:36

标签: asp.net-core .net-core code-coverage dotcover

我正在尝试在 ASP.NET Core 2.0 Web应用程序上设置代码覆盖率。我使用 dotcover (来自JetBrains)为我的所有其他版本提供代码覆盖(通过在构建过程中从命令行运行dotcover)。

当我从我们的.NET Core 2.0 Web应用程序的构建服务器运行dotcover时,我看到了这一点。

enter image description here

它声明它已成功运行,但只是挂起并且没有创建代码覆盖文件。

dotcover analyse /TargetExecutable:"C:\Program Files\dotnet\dotnet.exe" /TargetArguments:"test MyUnitTests.csproj" /Output:report.html /ReportType:HTML /LogFile=dotcover.log 

如果我尝试添加代码覆盖率集合,我会看到这一点。

enter image description here

dotcover analyse /TargetExecutable:"C:\Program Files\dotnet\dotnet.exe" /TargetArguments:"test MyUnitTests.csproj --collect:coverage" /Output:report.html /ReportType:HTML /LogFile=dotcover.log

最后,如果我自己运行 dotnet test (没有dotcover),它似乎已经有效,但是再次没有创建覆盖输出。

enter image description here

dotnet test "MyUnitTests.csproj" -- collect:coverage

我不确定如何为.NET Core 2.0应用程序生成代码覆盖率,并且不确定如何/使用哪些数据收集器以及如何使用它们。在这个例子中,dotcover是数据收集器吗?

基本上,我只想为.NET Core 2.0应用程序生成代码覆盖率。

更新

根据建议,我已安装 coverlet 作为 dotcover 的替代方案。我有它的工作,但我的行为不一致。当我从服务器运行我的批处理文件时,一切都很好。

enter image description here

但是当从TFS运行时我得到一个错误。

enter image description here

System.IO.FileNotFoundException:没有可用的测试。确保测试项目有一个nuget参考包" Microsoft.NET.Test.Sdk"和框架版本设置是适当的,然后再试一次。

我的项目确实引用了该程序集(在创建单元测试项目时,VS本身默认安装了该程序集)。

为什么TFS在肯定存在时会抱怨该程序集,并且可以从命令行手动运行而没有错误?

2 个答案:

答案 0 :(得分:2)

我不知道dotcover是否适用于网络核心,但您可以查看coverlet,也可以在此处找到示例:Cross platform code coverage arrives for .NET Core

答案 1 :(得分:2)

我刚刚将一个项目从net461迁移到了dotnet核心,我想维护代码覆盖率。使用OP建议的命令行是我所需要的。我正在迁移假脚本,我之前使用点覆盖生成快照文件以推送到teamcity和html报告。我可以确认以下内容对我有用:

  • DotNet SDK 2.1.2
  • JetBrains.dotCover.CommandLineTools 2018.1.0
    • 2017.1.20170403.131707
    • 也测试为阳性
  • Microsoft.NET.Test.Sdk 15.7.0
  • NUnit 3.10.1
  • NUnit3TestAdapter 3.10.0

DotCover cover

<dotcoverpath>\dotCover.exe cover /TargetExecutable:"C:\Program Files\dotnet\dotnet.exe" /TargetArguments:"test --no-build --no-restore ./src/<test-project-root>" /Filters=+:<namespace-to-test> /Output:./bin/DotCover.snapshot

DotCover analyze

我在生成的快照文件中使用DotCover report命令时没有执行以下操作,但我也可以确认以下内容对我有用。

<dotcoverpath>\dotCover.exe analyze /TargetExecutable:"C:\Program Files\dotnet\dotnet.exe" /TargetArguments:"test --no-build --no-restore ./src/<test-project-root>" /Filters=+:<namespace-to-test> /ReportType=HTML /Output:./bin/coverage.html

备注

  • 在我的测试运行中,我没有恢复软件包(--no-restore)或编译(--no-build)项目,因为我已经在上一步中完成了这项工作。这些可以删除,以满足您的需求。
  • OP确实说测试完成后点盖似乎挂了。值得指出的是,如果存在大量代码和/或程序集,那么在测试覆盖结束时将快照转换为报告的工作可能需要一段时间。事实上,在生成html报告时,测试已完成时,您会看到点覆盖暂停。使用过滤器(/ Filters =)参数可以减少所涵盖事物的大小,特别是如果您不想对第三方组件进行任何覆盖。
  

/Filters=ARG(可选)指定coverage过滤器。句法:   +:module=*;class=*;function=*;使用-:myassembly从代码覆盖范围中排除程序集。这里支持星号通配符(*