menu XUJINKAI 的个人主页
create settings
home
主页
list
全部博文
  • Collection
  • build
    常用工具
  • About
  • assistant_photo
    个人项目
    tag_faces
    捐赠
    person
    关于

    计算dotnet项目的测试覆盖率

    Tags: dotnet , csharp

    VS的测试覆盖率功能需要Enterprise版本才有,不过也是有开源免费的工具来帮助我们查看代码覆盖情况的。

    coverlet https://github.com/tonerdo/coverlet

    ReportGenerator https://github.com/danielpalme/ReportGenerator

    coverlet用于计算,并将结果导出为json或xml。ReportGenerator可以将结果转换成漂亮的网页供我们查看。

    安装

    dotnet如何装就不说了,装好dotnet后,运行下面两行命令安装这两个工具:

    dotnet tool install -g dotnet-reportgenerator-globaltool

    dotnet tool install --global coverlet.console

    这里都是采用了全局安装的方式。

    coverlet是支持nuget方式安装的,在测试项目中添加coverlet.msbuild包,之后测试时运行命令 dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput="analysis.xml" 就会将结果保存到analysis.xml中。
    不过我没发现如何将这条命令添加到vs中,让vs在运行测试的同时生成分析文件,所以这个方式就先作罢了。

    使用

    假设你的测试项目名字是TEST_PROJ,工作目录是解决方案根目录,并且生成的结果全部保存到.coverage文件夹。

    目录结构如下:
    .coverage/
    TEST_PROJ/
    solution.sln

    首先编译项目:

    dotnet build TEST_PROJ -o "../.coverage"

    这里build命令会进入TEST_PROJ文件夹,所以用../来返回上层目录。

    然后使用coverlet来测试并生成结果:

    coverlet ".coverage/TEST_PROJ.dll" --target "dotnet" --targetargs "vstest .coverage/TEST_PROJ.dll" --format "opencover" --output "./.coverage/analysis.xml"

    第一个参数是编译好的测试文件,coverlet会执行target和targetargs中的值进行测试(并计算覆盖率)。coverlet支持导出多种格式,这里使用ReportGenerator支持的opencover格式。

    最后来生成网页报告:

    reportgenerator "-reports:.coverage/analysis.xml" "-targetdir:.coverage"

    你可以把以上命令保存到一个bat文件中,并在最后运行start .coverage/index.htm来打开网页,这样一个全自动的覆盖率生成脚本就完成了。

    更多

    coverlet可以使用–exclude和–include手动排除或添加类。

    以排除举例,在命令行后添加--exclude "[Assembly]ClassName"即可将Assembly项目中的ClassName类排除。

    文档在这里,就不赘述了。


    Disqus评论加载中。。。