这篇文章给大家分享一下,如何配置.NET Core项目自动化测试和代码覆盖率审查。
基本知识,请参考这里: https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-with-dotnet-test
环境准备:
演示项目基于Visual Studio Code,并且安装如下插件
- Coverage Gutters
- Coverlet
我有如下的项目结构
本地开发环境运行测试并查看代码覆盖率
运行 dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=lcov /p:CoverletOutput=./lcov.info
点击状态栏中的Watch 按钮
这样就能快速进入源代码中查看哪些代码覆盖,哪些代码没有覆盖。
下图红色标出的代码是没有覆盖到的。
配置CI 系统自动测试和计算覆盖率
我这里用 的是Azure DevOps,希望每次pipeline运行时能了解测试成功率和代码覆盖率。
你可以像下面这样定义Pipeline
# ASP.NET
# Build and test ASP.NET projects.
# Add steps that publish symbols, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/aspnet/build-aspnet-4
trigger:
- main
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: DotNetCoreCLI@2
inputs:
command: 'test'
arguments: '--collect "XPlat Code Coverage"'
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: 'Cobertura'
summaryFileLocation: '$(Agent.TempDirectory)*coverage.cobertura.xml'
成功运行后,会看到下面这样的详细测试报告
还有代码覆盖率审查报告
通过在Azure DevOps安装一个插件("Build Quality Checks"),可以根据代码覆盖率的数值进行代码质量审查。例如下图所示,就是我们规定必须代码覆盖率到达60%以上才能编译通过。