如何在Visual Studio中测量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结合使用的更好/更集成的代码覆盖率测量方法?
将NuGet包 Microsoft.CodeCoverage 1.0.1添加到project.json
。
我正在为Asp.NET
工作模板,现在我正在进行unit testing,所以我看到了你的post。 你可以在这里看到项目/配置。
免责声明 :这些步骤来自使用OpenCover测量ASP.NET核心覆盖范围–DotNetThoughts 。
虽然海报上有关于这个网站的说法,但我认为这里的这些步骤仍然是最好的。
注意 :这些说明适用于Windows操作系统,应该可以轻松地用于OpenCover和ReportGenerator支持的任何操作系统。
- 创建您的ASP.NET核心MVC网站
- 确保global.json在项目中具有“测试”
- 右键单击解决方案中的测试文件夹并添加新项目
- 确保项目类型是.NET Core类库
- 将以下内容添加到project.json依赖项节点:
- “dotnet-test-xunit”:“2.2.0-preview2-build1029”,
- “xunit”:“2.2.0-beta3-build3402”
- “Microsoft.CodeCoverage”:“1.0.2”
- 在版本下将以下内容添加到project.json中
- “testRunner”:“xunit”,
- 写下你的unit testing
- 下载OpenCover和报告生成器
- 安装OpenCover
- 将Report Generator提取到名为Report Generator的文件夹中的OpenCover install dir中
- 在项目中创建一个BAT文件,并将其命名为cover.bat
- 添加以下内容:
@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"
- 用项目命名空间替换NAMESPACE。
- 如果有多个项目,请根据需要为每个名称空间复制正则表达式
+[*]NAMESPACE.*
- 保存文件
- 打开命令提示符并确保在测试项目中
- 键入cover以使您的unit testing运行,并且您的覆盖率将以HTML格式或您在步骤11中命名为bat文件的任何内容生成。
代码覆盖对我有用,对于使用Microsoft.CodeCoverage
.Net Core,如上所述。
检查是否已将Microsoft.CodeCoverage
nuget添加到测试项目中
还要检查主项目上的project.json文件,debugType属性应该是“full”而不是“portable”
"buildOptions": { "emitEntryPoint": true, "preserveCompilationContext": true, "debugType": "full" },
这对我来说很有用
Coverlet( https://github.com/tonerdo/coverlet )是最近出现的一个新项目。 它与msbuild一起工作,为覆盖提供了直接的解决方案
我刚刚尝试了ReSharper版本2016.3 EAP 4(早期访问预览)。 除了unit testing执行现在dotCover返回我的.net核心测试项目的代码覆盖率信息。
OpenCover + ReportGenerator。 作为NUGET包安装到您的一个测试项目中(一次,因为它们只需要出现在包文件夹中)。
然后你可以把这个powershel https://github.com/rpokrovskij/opencover4vs.ps1放到你的解决方案文件夹中,并使用路径全局设置你的测试项目,例如
$ TestProjectsGlobbing = @(,’*。Test.csproj’)
然后,您可以将其作为常规Powershel脚本运行。 结果应显示在\ TestsResults \ report \ index.html的解决方案文件夹中
- 调用AddUserAsync .NET Core 2.0时出现PlatformNotSupportedexception
- 只有1个Main方法的XUnit测试项目:“程序定义了多个入口点。”
- 将客户端证书添加到.net核心Httpclient
- 如何运行.Net Core dll?
- 执行等待异步操作时的AWS Lambda行为?
- 无法为netstandard1.x项目安装Netstandard1.x Nuget软件包
- 如何在Visual Studio 2017中增加运行.NET Core 1.x / 2.x测试的堆大小?
- CS0433:两者中都存在“List ”类型
- 如何在.Net Core中使用自定义预处理程序指令