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 还可以通 ...
随机推荐
- Tomcat9配置SSL连接
.首先生成数字证书: 使用JDK的keytool命令,生成证书(包含证书/公钥/私钥)到D:\ssl.keystore:keytool -genkey -keystore "D:\ssl.k ...
- Prepare paddle in Docker
1. Install Docker sudo apt-get install -y docker.io a) pull repository from server in China, here is ...
- ubuntu: firefox+flashplay
更新两步: 1.安装firefox:rm-->下载-->mv-->ln http://www.cnblogs.com/yzsatcnblogs/p/4266985.html 2. f ...
- SSH升级到7.7
#!/bin/bash#删除旧版ssh包 危险操作,不删除也可以安装,建议跳过此操作.#rpm -e `rpm -qa | grep openssh` #安装zlib依赖包wget -c http:/ ...
- Automatic Text Difficulty Classifier Assisting the Selection Of Adequate Reading Materials For European Portuguese Teaching --paper
the system uses existing Natural Language Processing (NLP) tools, a parser and an hyphenator, and tw ...
- JAVA:形参与实参
今天百度startWith函数的用法,无意中看到了形参这个称呼,因此就去了解了下形参与实参. 在传值机制中,其实就是把变量b(实参)的地址传递给了形参(也就是实参跟形参都是用的同一个地址,在传值之前形 ...
- int &p
int &p为引用,而int p为定义变量.二者区别如下:1 引用在定义的时候必须赋值,否则编译会出错.正确的形式为int &p = a;其中a为int型变量.2 引用在定义时不会分配 ...
- C#中的IDisposable接口
深入理解C#中的IDisposable接口 写在前面 在开始之前,我们需要明确什么是C#(或者说.NET)中的资源,打码的时候我们经常说释放资源,那么到底什么是资源,简单来讲,C#中的每一种类型都是一 ...
- spring管理
spring管理 SqlMapConfig.xml: <?xml version="1.0" encoding="UTF-8"?> <bean ...
- WebSafeBase64Decode
WebSafeBase64Decode golang (adapter zplay doubleclick ) func base64url_decode(s string) ([]byte, err ...