使用OpenCover生成单元测试覆盖率报告

在单元测试实践中经常会需要查看代码覆盖率,大多生成单元测试覆盖率的软件都是收费的。

开源的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脚本即可,感受下:


你可能感兴趣的:(单元测试,单元测试工具,OpenCover)