• MSTest/NUnit 单元测试 代码覆盖率试用 OpenCover 和ReportGenerator


    VS自带是单元测试代码覆盖率(VS自带这个是最佳选择)需要企业版才有。很蛋疼。。。。。。

    1.下载安装OpenCover 和ReportGenerator。 关于这2个是干啥的百度下。简单说就是可以分析类似MSTest的测试结果和生成覆盖率刻度报告,如HTML文件。OpenCover  还支持NUnit等测试框架。

    2. DotNet 的项目文件(.csproj 或者 .vbproj)里最后面可编辑添加自定义的操作。如完成编译后执行特定的任务,这样就方便用命令参数调用OpenCover 和ReportGenerator来读取解析和生成单元测试代码覆盖率报告文件。

    注:这个csproj 即是单元测试项目文件。


    <Target Name="AfterBuild">
    <Message Text="Executing Unit Tests and running OpenCover to check code coverage..." />
    <MakeDir Directories="Coverage" />
    <Exec Command='"C:UsersgwangAppDataLocalMicrosoftVisualStudio11.0Extensionsusfoinpw.bveOpenCoverOpenCover.Console.exe" -target:"C:Program Files (x86)Microsoft Visual Studio 11.0Common7IDEMSTest.exe" -targetargs:/testcontainer:"binDebugUnitTestProject1.dll" -filter:+[*]* -output:CoverageCodeCoverageResults.xml -register:user -mergebyhash' />
    <Exec Command='"C:UsersgwangAppDataLocalMicrosoftVisualStudio11.0Extensionsusfoinpw.bveReportGeneratorReportGenerator.exe" -reports:CoverageCodeCoverageResults.xml -targetDir:CodeCoverageHTML' />

    </Target>

     注:OpenCover 的参数 register:user 要根据编译平台的实际情况设置,当我集成在Jenkins时候发现需要 用 -register:Path32 。不然报错:the profiler may not be registered correctly, please refer to the Usage       guide and the -register switch.。。。。。。。。。。

    更多参数书面参考官方文档:https://github.com/OpenCover/opencover/wiki/Usage

    不出意外会在你编译完这个单元测试项目的输出窗口会有类似如下的输出信息:

    1>------ Rebuild All started: Project: WindowsFormsApplication1, Configuration: Debug Any CPU ------
    1> WindowsFormsApplication1 -> C:UsersgwangDocumentsVisual Studio 2012ProjectsUnitTestProject1WindowsFormsApplication1inDebugWindowsFormsApplication1.exe
    2>------ Rebuild All started: Project: UnitTestProject1, Configuration: Debug Any CPU ------
    2> UnitTestProject1 -> C:UsersgwangDocumentsVisual Studio 2012ProjectsUnitTestProject1UnitTestProject1inDebugUnitTestProject1.dll
    2> Running Code Analysis...
    2> Code Analysis Complete -- 0 error(s), 0 warning(s)
    2> Executing: C:Program Files (x86)Microsoft Visual Studio 11.0Common7IDEMSTest.exe
    2> Microsoft (R) Test Execution Command Line Tool Version 11.0.50727.1
    2> Copyright (c) Microsoft Corporation. All rights reserved.
    2>
    2> Loading binDebugUnitTestProject1.dll...
    2> Starting execution...
    2>
    2> Results Top Level Tests
    2> ------- ---------------
    2> Passed UnitTestProject1.UnitTest1.TestInstanceMethod
    2> Passed UnitTestProject1.UnitTest1.TestMethod1
    2> Passed UnitTestProject1.UnitTest1.TestMethod2
    2> Passed UnitTestProject1.UnitTest1.TestMethod5
    2> Passed UnitTestProject1.UnitTest1.TestStaticMethod
    2> 5/5 test(s) Passed
    2>
    2> Summary
    2> -------
    2> Test Run Completed.
    2> Passed 5
    2> ---------
    2> Total 5
    2> Results file: C:UsersgwangDocumentsVisual Studio 2012ProjectsUnitTestProject1UnitTestProject1TestResultsgwang_WL000631027 2019-09-26 16_27_56.trx
    2> Test Settings: Default Test Settings
    2> Committing...
    2> Visited Classes 2 of 7 (28.57)
    2> Visited Methods 18 of 29 (62.07)
    2> Visited Points 87 of 137 (63.50)
    2> Visited Branches 20 of 35 (57.14)
    2>
    2> ==== Alternative Results (includes all methods including those without corresponding source) ====
    2> Alternative Visited Classes 2 of 7 (28.57)
    2> Alternative Visited Methods 18 of 33 (54.55)
    2> Loading report 'C:UsersgwangDocumentsVisual Studio 2012ProjectsUnitTestProject1UnitTestProject1CoverageCodeCoverageResults.xml'
    2> Preprocessing report
    2> Initiating parser for OpenCover
    2> Current Assembly: UnitTestProject1
    2> Current Assembly: WindowsFormsApplication1
    2> Initializing report builders for report types: Html
    2> Analyzing 7 classes
    2> Creating report 1/7 (Assembly: UnitTestProject1, Class: UnitTestProject1.Properties.Settings)
    2> Creating report 2/7 (Assembly: UnitTestProject1, Class: UnitTestProject1.UnitTest1)
    2> Creating report 3/7 (Assembly: WindowsFormsApplication1, Class: WindowsFormsApplication1.Form1)
    2> Creating report 4/7 (Assembly: WindowsFormsApplication1, Class: WindowsFormsApplication1.Program)
    2> Creating report 5/7 (Assembly: WindowsFormsApplication1, Class: WindowsFormsApplication1.Properties.Resources)
    2> Creating report 6/7 (Assembly: WindowsFormsApplication1, Class: WindowsFormsApplication1.Properties.Settings)
    2> Creating report 7/7 (Assembly: WindowsFormsApplication1, Class: WindowsFormsApplication1.ZipHelper)
    2> Creating summary
    2> Report generation took 0.3 seconds
    ========== Rebuild All: 2 succeeded, 0 failed, 0 skipped ==========

    现在你去那个配置的 CodeCoverageHTML 里会看到代码覆盖率报告html文件已经全部生成 里面了。点击index.html 打开就可以看到。

    其实还有个VS的扩展工具 叫 AxoCover 可以一键做到。不需要这些设置。

    最后你可以集成到类似Jenkins这样的CI工具服务端。

    如果你用的是Nunit 可设置如下配置节点:

    <Target Name="AfterBuild">
    <Message Text="Executing Unit Tests and running OpenCover to check code coverage..." />
    <MakeDir Directories="Coverage" />
    <Exec Command='"C:UsersgwangAppDataLocalMicrosoftVisualStudio11.0Extensionsusfoinpw.bveOpenCoverOpenCover.Console.exe" -target:"C:UsersgwangDocumentsVisual Studio 2015ProjectsWpfApplication1packagesNUnit.ConsoleRunner.3.10.0 ools unit-console.exe" -targetargs:"binDebugUnitTestProject1.dll" -filter:+[*]* -output:CoverageCodeCoverageResults.xml -register:user -mergebyhash' />
    <Exec Command='"C:UsersgwangAppDataLocalMicrosoftVisualStudio11.0Extensionsusfoinpw.bveReportGeneratorReportGenerator.exe" -reports:CoverageCodeCoverageResults.xml -targetDir:CodeCoverageHTML' />

    </Target>

    有点扯淡的是这个会吧nunit.framework 本身的代码覆盖率也给解析出来。。。。。。。待研究什么参数开关能忽略这个nunit.framework。

    最后感言,凡是配置太复杂的操作都是“烦人累”的,或者叫“反人类”的。

    扩展阅读 :c# 单元测试 ,对静态方法(static)和私有方法(private) 进行单元测试

    NUnit-Console 命令行选项详解:  https://yq.aliyun.com/articles/354404

  • 相关阅读:
    net core 接入 Google Authenticator
    centos7 安装Mysql8.0笔记
    学习笔记: AOP面向切面编程和C#多种实现
    Exceptionless 生产部署笔记
    图片上下左右自适应对齐
    rem
    mysql command line client 使用命令
    文字溢出换行或者省略号
    一个自欺欺人的代码(便于理解函数和对象基础)
    this、new、模式工厂、创建新的构造函数
  • 原文地址:https://www.cnblogs.com/wgscd/p/11592820.html
Copyright © 2020-2023  润新知