.Net core基于xUnit的单元测试查看测试覆盖率
Posted 娃都会打酱油了
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.Net core基于xUnit的单元测试查看测试覆盖率相关的知识,希望对你有一定的参考价值。
写代码如何保证代码质量,基本大家都知道要做单元测试,那如何知道你单元测试是不是测试到了所有代码场景呢,这就要通过测试覆盖率来体现了。
测试覆盖率,一般来说主要是Line代码行数覆盖率,同样还会有Branch分支覆盖率,Method方法覆盖率等,主要是各自的侧重点不同,但只要Line的覆盖率是100%,其它几项的覆盖率也必定是100%。
如何创建单元测试,这里就一带而过,就是新建项目,筛选测试
,然后按自己喜好选择一个测试框架,这里就选了xUnit
具体单元测试怎么写,这里就不说了,只说下如何查看你的代码测试覆盖率。
Visual Studio
Visual Studio本身就支持查看测试覆盖率,具体就是测试--分析所有测试的代码覆盖率
执行完毕后,可以看到代码覆盖率结果
可以通过点击展开,查看都是哪些代码没有被覆盖,最终到代码层次时,会显示代码覆盖色
,通过颜色差异,可以清楚的看到哪些代码没被单元测试覆盖。
coverlet
要用这个首先需要在单元测试项目中添加引用:coverlet.collector
,coverlet.msbuild
,在Nuget
资源管理器中进行添加即可,之后就可以通过以下指令在PowerShell
中执行单元测试
dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:Exclude="[xunit*]\\*" /p:CoverletOutput="../TestResults/"
CoverletOutput
对应的是报告生成路径,../TestResults/
是为了保持和VS的路径名称一致,如果你的sln文件与默认层次结构不一致,那么路径要进行相应调整。
PS
中只能看到单元测试覆盖率的一个汇总结果,然后这个覆盖率数字呢和VS统计的还有一些差异,当然这里我们也就不关注了,毕竟差异不大,而且测试覆盖率一般只要达到80%就可以认为单元测试已经足够。
上面的统计结果显然不能帮助我们提升测试覆盖率,这时候就需要reportgenerator
来查看究竟哪些代码没被覆盖。注意reportgenerator
是CLI工具
,在nuget
上会有对应的指令,该指令同样可以在PS
中执行。
dotnet tool install --global dotnet-reportgenerator-globaltool --version 5.0.4
注意.Net core
版本不同,使用的reportgenerator
版本也不同,dotnet-reportgenerator-globaltool
是针对.Net core 3.x
及以上版本的,.Net core 2.x
版本对应的是dotnet-reportgenerator-cli
。
安装完reportgenerator
之后,就可以通过指令生成html报告页面,reports
对应的是前面dotnet test指令
生成的具体汇总xml,targetdir
为你最终要生成的html位置。
reportgenerator "-reports:.\\TestResults\\coverage.netcoreapp3.1.cobertura.xml" "-targetdir:.\\TestResults\\html" -reporttypes:HTML;
最新版的reportgenerator
需要.Net 6.0
版本,如果没安装过VS2022
的话,会有相应的提示。
你可以到微软的官网地址进行下载,然后只需要下载安装runtime
就行
上述指令执行完成后,可以到相应的目录打开index.htm
,这时候就可以比较直观的查看到统计的各项覆盖率。
这里每行链接都是可以点击的,进去后就可以看到更详细的覆盖率,同样通过颜色差异来进行显示。
以上是关于.Net core基于xUnit的单元测试查看测试覆盖率的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在 .NET Core 的单元测试中查看生成的日志消息?