命令行方式获取代码覆盖率数据,这看起来似乎是非常简单的事情,无非就是执行一个命令然后输出一些东西,确实,命令行方式获取代码覆盖率数据的套路跟我们常规的套路是一致的。但是,当我们去MSDN或者Google .NET Code Coverage Commandline Tool 时,却得不到我们想要的结果。神奇的是,微软官网也没有关于命令行获取覆盖率数据的解释。没办法,这就只能自己摸索摸索了。
仔细想一想,我们平时命令行还原nuget包或者生成解决方案用的命令是这样的:
nuget.exe restore xxx.sln
msbuild(dotnet build) xxx.sln
VS2012后我们用命令行跑单元测试是这样的:
vstest.console.exe xxx.dll
我们在VS安装目录下的找到了CodeCoverage.exe(%vsroot%\Team Tools\Dynamic Code Coverage Tools),查看它的帮助文档,如下面这张图:
image05.png我们会发现,里面主要有 collect 和 analyze 操作,但是显然不能直接对一个sln执行收集和分析,对一个Tests.dll执行收集也不合理,毕竟覆盖率是业务代码的覆盖率,Tests.dll中并不会附带覆盖率信息。经过一些尝试,它的流程大致是这样子:
-
执行collect收集覆概率信息到二进制文件
CodeCoverage.exe collect /output:<二进制文件输出路径> vstest.console.exe <Tests.dll路径>
-
分析二进制数据,输出到人类友好的xml
CodeCoverage.exe analyze /output:<xml输出目录> <二进制文件目录>
在xml中有非常详细的覆盖率数据,包括行覆盖率、块覆盖率、具体的哪行哪列被覆盖等。
在xml中有非常详细的覆盖率数据,包括行覆盖率、块覆盖率、具体的哪行哪列被覆盖等。
针对使用了Fakes的测试项目,使用 CodeCoverage.exe collect 命令时会报错,可以使用如下命令代替
vstest.console.exe <Tests.dll路径> /ResultsDirectory:<测试结果目录> /EnableCodeCoverage
网友评论