ASP.NET Core 代码覆盖率的轻松实现

在最近的一个基于微软现代跨平台技术栈的新项目中,原本打算讲述在计算一个看似基础的指标时所经历的诸多步骤的痛苦。但相反,将告诉,生活可以变得多么愉快。

新项目技术栈如下:

  • 供应商中立(可以轻松切换到Jenkins或TeamCity)
  • 支持任务依赖管理
  • 本地可运行
  • 易于调试
  • 版本控制
  • C#
其他技术是项目要求,除了XUnit,它随ASP.NET Boilerplate一起提供(关于这一点,将来会有更多文章),并不介意更改它。如果是NUnit的粉丝,在本文的其余部分,只需将"X"替换为"N",这将是相同的。

测试与ASP.NET Core 在安装了cake并编写了构建任务之后,非常高兴地发现,因为测试是一等公民,可以这样测试: Task("Build") .IsDependentOn("Restore") .Does(() => { var settings = new DotNetCoreBuildSettings { Configuration = configuration }; DotNetCoreBuild("./CakeCoverageTest.sln", settings); });

这转化为: dotnet.exe test "CakeCoverageTest.Test/CakeCoverageTest.Test.csproj" --no-build 它运行ASP.NET Core内置的测试基础设施,该基础设施原生识别XUnit和NUnit。 NoBuild = true是因为否则.NET测试命令将尝试构建,喜欢让Cake处理依赖关系。这可以防止多次构建,例如,如果一个高层次的Deploy任务依赖于Test和Package,而这两个任务又都依赖于Build。

在这种情况下,Cake足够智能,如果运行Deploy,它只会构建一次。这与任何"AKE"工具(如Make, Psake, Rake,或MS Build)并没有太大的不同,但它比bash或Powershell脚本更好,因为需要使用全局状态。任务依赖管理++。

获取覆盖率 在Visual Studio 15.8之前,获取覆盖率将涉及切换到仅限Windows的vstest.console.exe替代方案,并需要Visual Studio Enterprise。然后,它将需要添加测试适配器,修复工具路径的错误,添加引用Microsoft.CodeCoverage NuGet包,添加Full行到主要的.csproj,并解释新的pdb(程序数据库)调试信息文件与旧的不同。 幸运的是,从9月份开始,.NET测试有了一个新参数: --collect "Code Coverage"。不幸的是,它仍然仅限于Windows,但他们已经取消了对Visual Studio Enterprise的要求。使其跨平台是议程上的事项,甚至可能在阅读本文时已经得到支持。 Cake目前还不支持覆盖参数,但有了ArgumentCustomization参数的灵活性,有一个简单的解决方案: Task("Test") .Description("Runs unit tests.") .IsDependentOn("Build") .Does(() => { var testLocation = File("./CakeCoverageTest.Test/CakeCoverageTest.Test.csproj"); var settings = new DotNetCoreTestSettings { Configuration = configuration, NoBuild = true, ArgumentCustomization = args => args .Append("--collect").AppendQuoted("Code Coverage") .Append("--logger").Append("trx") }; DotNetCoreTest(testLocation, settings); });

这转化为: dotnet test "CakeCoverageTest.Test/CakeCoverageTest.Test.csproj" --configuration Release --no-build --collect "Code Coverage" --logger trx 并且有一点运气,它应该输出类似于以下内容: Starting test execution, please wait... Results File: C:\dev\Cake\CakeCoverageTest\CakeCoverageTest.Test\TestResults\Lee_LEE-XPS_2018-10-21_17_34_47.trx Attachments: C:\dev\Cake\CakeCoverageTest\CakeCoverageTest.Test\TestResults\ 3ba423f8-2f10-4bc2-8b53-b4fef907369e\Lee_LEE-XPS_2018-10-21.17_34_44.coverage Total tests: 1. Passed: 1. Failed: 0. Skipped: 0. Test Run Successful. 这是多么棒啊?!几乎完成了。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485