zoukankan      html  css  js  c++  java
  • sonarqube C# Opencover来生成单元测试覆盖报告文档

    sonarqube C# 单元测试覆盖率一栏总是0%解决办法

     

    一、什么叫单元测试(unit testing)?

    是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函 数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中 要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
    C#中,一个方法,一个类,一个窗口的测试。即单元测试。

    二、为什么要进行单元测试。

    为了程序的正确性,尽早的发现程序的BUG,便于后期的开发及调试,维护。

    三、谁做这一工作?

    答案是:程序员自己,因为程序员才明白自己写的code,才知道要达到的效果。

    四、什么时候做?

    单元测试越早越好,早到什么程度?极限编程(Extreme Programming,或简称XP)讲究TDD,即测试驱动开发,先编写测试代码,再进行开发。在实际的工作中,可以不必过分强调先什么后什么,重要的是高效和感觉舒适。从经验来看,先编写产品函数的框架,然后编写测试函数,针对产品函数的功能编写测试用例,然后编写产品函数的代码,每写一个功能点都运行测试,随时补充测试用例。所谓先编写产品函数的框架,是指先编写函数空的实现,有返回值的直接返回一个合适值,编译通过后再编写测试代码,这时,函数名、参数表、返回类型都应该确定下来了,所编写的测试代码以后需修改的可能性比较小。

    五、 C#项目测试DEMO, 本demo用VS2019写。

    新建一个控制台应用。名称叫:UnitTestDemo

    image

    image

    写一个待测试的方法。

    image

    image

    新建一个单元测试项目。名称叫:UnitTestDemoTest

    image

    image

    引用UnitTestDemo

    image
    image
    image

    编写测试方法

    修改类名,及方法名。UnitTest1重命名为ProgramTest,方法名:TestMethod1改为:AddTest。
    这里说明一下,方法面上面的特性:[TestMethod]这是必须的。告诉编译器这是一个测试法式。
    写代码。调用要测试的方法。
    image

    image

    打开“测试资源管理器”,在“测试”->窗口->测试资源管理器

    image
    image

    如果未通过。是个红色的X,我们现在再写一个未通过的方法。
    注意方法的特性一定要加[TestMethod],再去运行测试。
    image

    image

    回到主项目。看方法提示行。上面有标测测试通过。

    image

    第二个测试失败了
    image

    在方法上面有一个清楚的提示。

    六、 sonarqube集成单元测试

    这里需要借助Opencover来生成单元测试覆盖报告文档

    1. 安装Opencover

    下载地址:https://phoenixnap.dl.sourceforge.net/project/opencover.mirror/4.7.1221/opencover.4.7.1221.msi
    image

    安装过程所有选项默认即可

    2. 执行sonarqub 扫描

    SonarScanner.MSBuild.exe begin /k:"UnitTestDemo"  /d:sonar.host.url="http://192.168.101.76:9000" /d:sonar.login="8ad34045e7e978ca678e184c397a76a62114f9ed" /d:sonar.cs.opencover.reportsPaths="%CD%\testcover.xml"
    
    MSBuild.exe /t:Rebuild
    
    "C:\Users\sunpengfei\AppData\Local\Apps\OpenCover\OpenCover.Console.exe" -output:"%CD%\testcover.xml" -register:user -target:"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" -targetargs:"%CD%\UnitTestDemoTest\bin\Debug\UnitTestDemoTest.dll"
    
    #注意替换相关exe 文件路径OpenCover.Console.exe是前面安装的 ,其他的是vs 2019自带程序,#UnitTestDemoTest.dll是测试项目生成
    
    SonarScanner.MSBuild.exe end /d:sonar.login="8ad34045e7e978ca678e184c397a76a62114f9ed"
    

    Begin 和end是固定格式,这里begin部分多了一个/d选项,/d为dynamic properties 动态属性.通过动态属性指定单元测试报告的位置.%CD%即为当前目录
    第二段 msbuild.exe执行构建.
    第三段 这里是生成单元测试覆盖率报告的关键. 首先指定Opencover所在位置,-register user 为注册当前windows用户以使其有权限执行.-output 指定覆盖率文件输出位置,这里必须和上面的 sonar.cs.opencover.reportsPaths保持一致. -target为要指定的单元测试runner,这里使用的是visual studio自带的vstest.console.exe targetargs指定要进行单元测试的目标dll.

    3. 扫描结果

    执行完成以后,我们再打开sonarqube web管理界面就会看到刚刚生成的mytest项目
    image

     
    分类: sonarqube
  • 相关阅读:
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第50章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第49章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第48章 读书笔记(待更新)
    Spring Boot 中使用 Quartz 实现任务调度
    实战 FastDFS Java 客户端上传文件
    分布式文件系统之 FastDFS
    Java 持久层框架之 MyBatis
    C语言实现贪吃蛇
    [转载]分享三篇非常好的学习心得
    selenium加载cookie报错问题:selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/15708385.html
Copyright © 2011-2022 走看看