使用OpenCover生成单元测试覆盖率报告
来源:互联网 发布:庭审网络直播 编辑:程序博客网 时间:2024/04/30 14:34
在单元测试实践中经常会需要查看代码覆盖率,大多生成单元测试覆盖率的软件都是收费的。
开源的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 configparserimport osconfig = 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.exeNUnitPath = D:\Proj\packages\NUnit.Runners.2.6.4\tools\nunit-console-x86.exeProjPath = D:\Proj\UnitTestProj\bin\Debug\UnitTestProj.exeProjDir = D:\Proj\UnitTestProj\bin\DebugOutPath = D:\Reports\NUnitTest\coverage.xmlReportGenPath = D:\Reports\Tools\ReportGenerator\bin\ReportGenerator.exeReportTargetDir = D:\Reports\CodeCoverage
注:一种简单的可选方案是直接将命令保存在文本文件里,需要运行时直接拷贝到命令窗口执行
3. 生成报告
运行上述run.py脚本即可,感受下:
- 使用OpenCover生成单元测试覆盖率报告
- 单元测试覆盖率生成网页报告----(一)
- 单元测试覆盖率生成网页报告----(三)
- 单元测试覆盖率生成网页报告----(四)
- 单元测试覆盖率生成网页报告----(二)
- VS2015+NUnit+OpenCover 完成单元测试代码覆盖率测试
- 使用VCS生成覆盖率报告
- Java单元测试Junit(六)使用Cobertura生成测试覆盖率报告
- 单元测试覆盖率生成网页报告----(五)邮件通知
- 使用lcov生成代码覆盖率的报告
- 使用gcov生成增量覆盖率报告
- Ant 单元测试及Jacoco覆盖率报告生成并将报告提交sonarqube
- JaCoCo+Maven+Jenkins自动执行单元测试并生成代码覆盖率报告
- C#代码覆盖率实践-vsinstr和OpenCover
- 使用Cobertura统计单元测试覆盖率
- 使用Cobertura统计单元测试覆盖率
- 使用Powermock实现单元测试,提高单元测试覆盖率
- 使用Powermock实现单元测试,提高单元测试覆盖率
- 树状数组小结
- Codeforces Gym 100548G The Problem to Slow Down You (Palindromic Tree 或 Hash水过) 2014西安现场赛G题
- JSP中对页面跳转的不同方法引出HTTP无状态的应对方法
- 选择法
- 持久化API(JPA)系列(四)管理器EntityManager--执行数据库更新
- 使用OpenCover生成单元测试覆盖率报告
- 推荐算法 开源
- 最大子序列问题:给定一整数序列A1,A2,A3...An(可能有负数),求A1~An的一个最大子序列Ai~Aj的和。
- soap 资料相关连接
- properties 配置文件中值换行的问题
- HSQL简介
- 文章标题
- Resource overlay
- python中安装libsvm时环境配置