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

版权声明:本文为博主原创文章,未经博主允许不得转载。

.png)
.png)
.png)
.png)

.png)
在单元测试实践中经常会需要查看代码覆盖率,大多生成单元测试覆盖率的软件都是收费的。
开源的Coverage Tool不多,OpenCover是一个不错的选择。
参考:http://stackoverflow.com/questions/276829/code-coverage-for-c-net
http://www.codeproject.com/Articles/677691/Getting-code-coverage-from-your-NET-testing-using
1. 准备工具
NUnit或者MS Unit
OpenCover:从这里获取
ReportGenerator:https://github.com/danielpalme/ReportGenerator
你也可以从nuGet上获取,具体方法请自己百度
2. 配置环境
OpenCover使用起来并不复杂,只是配置路径有点麻烦。
运行OpenCover需要一系列参数,这里只说明几个主要的参数:
-target:这是目标应用或服务的路径(名称),这里指单元测试工具的路径,支持NUnit和MS Unit
-targetdir:目标目录的路径,如果target argument已经包含了一个路径,那么这个参数可以提供一个查找pdb文件的可选路径
-targetargs:target参数指定的应用所需要的参数(编译测试工程生成的一个dll文件或者EXE文件路径)
-output:输出XML文件的路径,如果没有提供将在当前目录下生成results.xml, 该文件将用于ReportGenerator生成可视化的覆盖率报告
ReportGenerator所需要的参数:
-reports:上述XML文件的路径
-targetdir:生成报告的目录
为了方便环境配置,本人采用了Python脚本跟ini配置文件的方式
下面是脚本程序跟配置文件,请根据项目实际情况配置路径:
- # run.py 只需执行这个脚本就可以生成可视化报告
- import configparser
- import os
- config = configparser.ConfigParser()
- try:
- config.read('config.ini')
- if 'Default' in config.sections():
- if 'opencoverpath' in config['Default'].keys():
- OpenCoverPath = config['Default']['opencoverpath']
- if 'nunitpath' in config['Default'].keys():
- NUnitPath = config['Default']['nunitpath']
- if 'projdir' in config['Default'].keys():
- ProjDir = config['Default']['projdir']
- if 'projpath' in config['Default'].keys():
- ProjPath = config['Default']['projpath']
- if 'outpath' in config['Default'].keys():
- OutPath = config['Default']['outpath']
- if 'reportgenpath' in config['Default'].keys():
- ReportGenPath = config['Default']['ReportGenPath']
- if 'reporttargetdir' in config['Default'].keys():
- ReportTargetDir = config['Default']['ReportTargetDir']
- # print(OpenCoverPath)
- # print(NUnitPath)
- # print(ProjDir))
- # print(ProjPath)
- # print(OutPath)
- os.system('{0} -register:user -target:{1} -targetdir:{2} -targetargs:{3} -output:{4}'.format(OpenCoverPath, NUnitPath, ProjDir, ProjPath, OutPath))
- except e:
- print(e.message)
- else:
- os.system('{0} -reports:{1} -targetdir:{2}'.format(ReportGenPath, OutPath, ReportTargetDir))
- [Default]
- OpenCoverPath = D:\Reports\Tools\OpenCover\OpenCover.Console.exe
- NUnitPath = D:\Proj\packages\NUnit.Runners.2.6.4\tools\nunit-console-x86.exe
- ProjPath = D:\Proj\UnitTestProj\bin\Debug\UnitTestProj.exe
- ProjDir = D:\Proj\UnitTestProj\bin\Debug
- OutPath = D:\Reports\NUnitTest\coverage.xml
- ReportGenPath = D:\Reports\Tools\ReportGenerator\bin\ReportGenerator.exe
- ReportTargetDir = D:\Reports\CodeCoverage
注:一种简单的可选方案是直接将命令保存在文本文件里,需要运行时直接拷贝到命令窗口执行
3. 生成报告
运行上述run.py脚本即可,感受下:
C#代码覆盖率实践-vsinstr和OpenCover的更多相关文章
- C#代码覆盖率 -vsinstr和OpenCover
最近接触的项目涉及到C#开发的应用,测试过程中我们需要去分析C#的代码覆盖率,问了一些人,在网上也搜了一些,零碎的找到很多资料,但是都不是很完整,实际使用的过程中还是走了不少弯路.到现在为止,有两种可 ...
- 好代码是管出来的——.Net Core中的单元测试与代码覆盖率
测试对于软件来说,是保证其质量的一个重要过程,而测试又分为很多种,单元测试.集成测试.系统测试.压力测试等等,不同的测试的测试粒度和测试目标也不同,如单元测试关注每一行代码,集成测试关注的是多个模块是 ...
- VS社区版 使用 OpenCover 获取测试代码覆盖率
注:暂不支持VS2017 Visual Studio 2015 社区版没有集成代码覆盖率的功能,所以想在VS社区版中获取单元测试的代码覆盖率等数据,需要使用到插件 OpenCover. 下载 Open ...
- VS2015+NUnit+OpenCover 完成单元测试代码覆盖率测试
1.VS2015+NUnit+OpenCover 完成单元测试代码覆盖率测试 https://download.csdn.net/download/qq_39441918/10522539 2.*注意 ...
- MSTest/NUnit 单元测试 代码覆盖率试用 OpenCover 和ReportGenerator
VS自带是单元测试代码覆盖率(VS自带这个是最佳选择)需要企业版才有.很蛋疼...... 1.下载安装OpenCover 和ReportGenerator. 关于这2个是干啥的百度下.简单说就是可以分 ...
- 聊聊Go代码覆盖率技术与最佳实践
"聊点干货" 覆盖率技术基础 截止到Go1.15.2以前,关于覆盖率技术底层实现,以下知识点您应该知道: go语言采用的是插桩源码的形式,而不是待二进制执行时再去设置breakpo ...
- Python项目在Jenkins中的自动化测试实践(语法检查、单元测试,coverage(代码覆盖率)、自动打包)
原始链接:http://blog.csdn.net/a464057216/article/details/52934077 requirments OS: Ubuntu 14.04+ Gitlab 8 ...
- fir.im weekly - 「 持续集成 」实践教程合集
我们常看到许多团队和开发者分享他们的持续集成实践经验,本期 fir.im Weekly 收集了 iOS,Android,PHP ,NodeJS 等项目搭建持续集成的实践,以及一些国内外公司的内部持续集 ...
- Cobertura 代码覆盖率测试
Cobertura 是一种开源工具,它通过检测基本的代码,并观察在测试包运行时执行了哪些代码和没有执行哪些代码,来测量测试覆盖率.除了找出未测试到的代码并发现 bug 外,Cobertura 还可以通 ...
随机推荐
- POJ 2369 Permutations(置换群概念题)
Description We remind that the permutation of some final set is a one-to-one mapping of the set onto ...
- extjs技术
转载:http://www.cnblogs.com/willick/p/3168809.html 转载 :http://www.cnblogs.com/youring2/archive/2013/08 ...
- Python 使用sqlalchemy操作MYSQL
1. 安装sqlalchemy库 SQL操作引擎可能需要pymysql,故要安装如下两个程序 pip install sqlalchemy pip instal pymysql
- java多线程和Calendar(日历)常用API
一.进程与线程 进程是一个可执行的程序一次运行的过程 线程是程序中的一个执行流 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个主线程 二.Calendar import java.u ...
- lintcode 刷题 by python 部分链表题总结(2)
本篇博客对最近做的链表的算法题做个简单的小结,主要描述题目和提供解题思路,具体代码见我的 github:https://github.com/MUSK1881/lintcode-by-python 3 ...
- shapefile 转 geojson 文件类型
http://mapshaper.org/ 从natural earth下载后,扔进去2个文件,就可以了.
- 配置apache-maven-3.6.0时所遇到的坑(二)
在命令行窗口中输入:mvn -v 或 直接 mvn 时出现如下问题: The JAVA_HOME environment variable is not defined corre ...
- 能用padding,margin解决的不要使用伪元素,能用背景解决的也不要用伪元素
能用padding,margin解决的不要使用伪元素,能用背景解决的也不要用伪元素
- jqGrid 加载完jqGrid之后可以执行函数的方法
, gridComplete: function() { jQuery('#first_gridpager').html("首页 "); jQuery('#prev_gridpag ...
- css3的calc()
计算大小宽度距离的一个计算函数 使用方法 再括号中进行加减乘除的运算 例如: width : calc(100% - 75px) 注意 :符号左右两边要有空格