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 还可以通 ...
随机推荐
- AOP记录方法的执行时间
作用AOP监控方法的运行时间如下: @Component @Aspect public class LogAop { private Logger log = LoggerFactory.getLog ...
- react state为数组时插入值
react state为数组时,如何插入值.在react里,一切皆是状态state,如果想通过改变state修改渲染效果,只能yongsetState.但是setState又是key:value格式, ...
- 如何在VMware中安装Linux系统
这篇文章主要讲述如何在VMware12中安装RHEL6.9Linux操作系统 步骤一: 打开VMware软件,在主页中点击创建新的虚拟机或者点击左上角文件,在列表中点击新建虚拟机,如图: 步骤二: 点 ...
- Spring Boot 揭秘与实战(七) 实用技术篇 - Java Mail 发送邮件
文章目录 1. Spring Boot 集成 Java Mail 2. 单元测试 3. 源代码 Spring 对 Java Mail 有很好的支持.因此,Spring Boot 也提供了自动配置的支持 ...
- 读懂TCP状态转移
读懂TCP状态转移过程,对理解网络编程颇有帮助,本文将对TCP状态转移过程进行介绍,但各状态(总共11个)含义不在本文介绍的范围,请参考文末的书目列表. TCP状态转换图(state transiti ...
- 【letcode】5-LongestPalindromicSubstring
回文串 回文串(palindromic string)是指这个字符串无论从左读还是从右读,所读的顺序是一样的:简而言之,回文串是左右对称的.一般求解一个字符串的最长回文子串问题. problem:Lo ...
- Xlua使用教程、攻略
Xlua 使用指南 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创新! ...
- PTA——判断胖瘦
PTA 7-40 到底是不是太胖了 #include<stdio.h> #include<math.h> int main() { ,N; scanf("%d&quo ...
- linux报错jar包时出现“Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes”
linux安装zip命令: yum install zip zip -d demo.jar META-INF/*.RSA META-INF/*.DSA META-INF/*.SF
- Washing Text Animation
https://www.youtube.com/watch?v=q0_koJLc0OgBlender Tutorial: Washing Text Animation 需要用到插件, 进入用户设置的插 ...