当前位置:编程学习 > C#/ASP.NET >>

C#代码覆盖率实践-vsinstr和OpenCover

最近接触的项目涉及到C#开发的应用,测试过程中我们需要去分析C#的代码覆盖率,问了一些人,在网上也搜了一些,零碎的找到很多资料,但是都不是很完整,实际使用的过程中还是走了不少弯路。到现在为止,有两种可行的方案试验成功了,这里写出来给大家分享下。可能很多人都用过,就当是个整理吧。


方法一:使用VS自带的vsinstr工具
准备条件:安装VS2010或者VS2012。


基本的操作步骤,主要是三个。
1. 对被测的DLL进行插桩。
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Performance Tools\x64\vsinstr"  -coverage "D:\xxx.dll"

原来的dll自动被更名为 *.orig,相当于是一个备份。可以看到被插桩的DLL尺寸有所增加。

\


2. 启动coverage数据监控和收集。
start vsperfmon -coverage -output:"D:\xyz.coverage" /CS /user:everyone

 \
 


3. 运行被测的程序,或者等待被执行。

4. 停掉被执行的程序,可以直接关闭应用。


5.  停止coverage监听,生成数据。
vsperfcmd /shutdown

 

 \
 

6. 找到D:\xyz.coverage,双击可以直接用VS打开查看。 显示的是block覆盖率,如果有source code可以对着代码查看。

 

 
\

 

方法一小结:
1. 这种方式除了最后查看报告,不需要启动VS,也不限制被测的代码如何被测试,可以手工也可以其他自动化程序。
2. 目前来看需要逐个DLL插桩,对于exe文件没有尝试。
3. 生成的覆盖率报告是二进制文件,需要在VS里面查看。
4. 目前看到的是只有block级别的覆盖率数据,没有找到line级别的。

 


方法二:使用免费的OpenCover工具


准备条件:
1. 安装OpenCover工具,可以直接下载msi或者zip包
2. 下载ReportGenerator工具,用于将OpenCover生成的XML报告转换成更加可读的HTML报告。


具体的步骤:
1. 在VS里面随便用C#写了一小段代码,包含了一个分支,用于查看覆盖和未覆盖的情况。编译成 ConsoleApplicaiton1.exe


2. 通过OpenCover将被测的ConsoleApplicaiton1.exe在命令行启动起来,加上相关的参数。
 -output:c2.xml   指明将生成的报告文件名。
-targetdir:  告诉OpenCover这个exe对应的PDB在哪儿。两种方法PDB文件都是必须的。
-register 不是很清楚用途,但是是必须的,第一次没加这个参数覆盖率数据出不来。
更详细的参数请查看OpenCover的手册。


具体的命令:
OpenCover.Console.exe -register -target:"C:\Users\rickyqiu\Documents\Visual Studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe" -output:c2.xml -targetdir:"C:\Users\rickyqiu\Documents\Visual Studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\bin\Debug"

补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,