如何在Visual Studio中测量ASP.NET Core项目中的代码覆盖率?

Ral*_*ing 13 c# code-coverage visual-studio-2015 .net-core asp.net-core

我想在ASP.NET Core应用程序中测量我的XUnit-Tests的代码覆盖率.Visual Studio 2015中的.NET Core工具是预览2,目前代码覆盖率不起作用.

2月份的博客文章http://dotnetthoughts.net/measuring-code-coverage-of-aspnet-core-applications-using-opencover/通过使用打开封面的命令行显示了一种解决方法.我正在寻找Visual Studio内部更加集成的方式.

有没有人听说过与XUnit结合使用的更好/更集成的代码覆盖率测量方法?

小智 7

NuGet包 Microsoft.CodeCoverage 1.0.1添加到您的project.json.

我正在为Template工作,Asp.NET现在我正在进行单元测试,所以我看到了你的帖子.你可以在这里看到项目/配置.


Way*_*yne 5

免责声明:这些步骤来自使用OpenCover测量ASP.NET核心覆盖范围--DotNetThoughts.

虽然海报上有关于这个网站的说法,但我认为在这里继续繁荣这些步骤仍然是最好的.

注意:这些说明虽然适用于Windows操作系统,但应该可以轻松地用于OpenCover和ReportGenerator支持的任何操作系统.

  1. 创建您的ASP.NET核心MVC网站
  2. 确保global.json在项目中具有"测试"
  3. 右键单击解决方案中的测试文件夹并添加新项目
  4. 确保项目类型是.NET Core类库
  5. 将以下内容添加到project.json依赖项节点:
    • "dotnet-test-xunit":"2.2.0-preview2-build1029",
    • "xunit":"2.2.0-beta3-build3402"
    • "Microsoft.CodeCoverage":"1.0.2"
  6. 将以下内容添加到project.json版本下
    • "testRunner":"xunit",
  7. 写下你的单元测试
  8. 下载OpenCover报告生成器
  9. 安装OpenCover
  10. 将Report Generator解压缩到名为Report Generator的文件夹中的OpenCover install dir中
  11. 在项目中创建一个BAT文件,并将其命名为cover.bat
  12. 添加以下内容:
@echo off

SET dotnet="C:\Program Files\dotnet\dotnet.exe"  
SET opencover="C:\Program Files (x86)\OpenCover\OpenCover.Console.exe"
SET reportgenerator="C:\Program Files (x86)\OpenCover\ReportGenerator\ReportGenerator.exe"

SET targetargs="test"  
SET filter="+[*]NAMESPACE.* -[*.Test]* -[xunit.*]* -[FluentValidation]*"  
SET coveragefile=Coverage.xml  
SET coveragedir=Coverage

REM Run code coverage analysis  
%opencover% -oldStyle -register:user -target:%dotnet% -output:%coveragefile% -targetargs:%targetargs% -filter:%filter% -skipautoprops -hideskipped:All

REM Generate the report  
%reportgenerator% -targetdir:%coveragedir% -reporttypes:Html;Badges -reports:%coveragefile% -verbosity:Error

REM Open the report  
start "report" "%coveragedir%\index.htm"
Run Code Online (Sandbox Code Playgroud)
  1. 用项目命名空间替换NAMESPACE.
  2. 如果有多个项目,则+[*]NAMESPACE.*根据需要为每个名称空间复制正则表达式多次
  3. 保存文件
  4. 打开命令提示符并确保在测试项目中
  5. 键入cover以使您的单元测试运行,并且您的覆盖结果将以HTML格式或您在步骤11中命名为bat文件的任何内容.


小智 5

代码覆盖对我有用,对于.Net Core使用Microsoft.CodeCoverage如上所述.

检查您是否已将Microsoft.CodeCoveragenuget添加到测试项目中

还要检查主项目上的project.json文件,debugType属性应该是"full"而不是"portable"

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true,
    "debugType": "full"
  },
Run Code Online (Sandbox Code Playgroud)

这对我来说很有用


Ral*_*ing 0

我刚刚尝试了 ReSharper 版本 2016.3 EAP 4(早期访问预览版)。除了单元测试执行之外,现在 dotCover 返回我的 .net core 测试项目的代码覆盖率信息。