首页 > 编程语言 >sonarqube1 C# 单元测试覆盖率一栏总是0%解决办法

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

时间:2023-05-06 09:47:21浏览次数:50  
标签:CD% exe C# 单元测试 测试 0% sonar 编写

一、什么叫单元测试(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

标签:CD%,exe,C#,单元测试,测试,0%,sonar,编写
From: https://www.cnblogs.com/afei654138148/p/17373967.html

相关文章

  • CUDA 的随机数算法 API
    参考自NvidiacuRand官方API文档一、具体使用场景如下是是在dropout优化中手写的uniform_random的Kernel:#include<cuda_runtime.h>#include<curand_kernel.h>__device__inlinefloatcinn_nvgpu_uniform_random_fp32(intseed){curandStatePhilox4_32_10_t......
  • 解密Elasticsearch:深入探究这款搜索和分析引擎
    作者:京东保险 管顺利开篇最近使用Elasticsearch实现画像系统,实现的dmp的数据中台能力。同时调研了竞品的架构选型。以及重温了redis原理等。特此做一次es的总结和回顾。网上没看到有人用Elasticsearch来完成画像的。我来做第一次尝试。背景说完,我们先思考一件事,使用内存系统做......
  • Django的MVT模式和Spring的MVC模式类比
    Spring的MVC模式MVC: Model-View-Controller 模型-视图-控制器M:数据处理V:界面显示C:逻辑处理最开始用于Desktop程序开发,现在已被广泛使用,包括Web开发。核心思想: 分层,解耦。MVC分离了数据处理和界面显示的代码,使得程序可以在不修改数据处理相关逻辑的前提下......
  • k8s 建service
    root@myang-node:~/ingress-nginx#kubectlcreatedeploybackend-api--image=registry.cbeijing.aliyuncs.com/dotbalo/nginx:backend-api-nstudy-ingressdeployment.apps/backend-apicreatedroot@myang-node:~/ingress-nginx#kubectlexposedeploybackend-api-......
  • GetTextAsync 或 异步函数执行完毕后的处理技巧
    //方法一Task.Factory.StartNew(()=>                       {                           //inti=0;                           //varpageText=wb.GetTextAsync();         ......
  • uniapp使用scss定义全局css
    1.新建scss文件,定义各种全局css样式$orange:#ee5313!default;//主题色:橙色$darkOrange:#d43a11;//深橙色$color:#333;$gray:#999;//灰色$lightGray:#bbb;//浅灰$grayBg:#f3f3f3!important;//body灰色背景$white:#fff;//白色$blue:#1a......
  • nc的使用
    nc,全称netcat,是一个常用的网络工具,可以用于连接网络套接字(socket)并发送和接收数据。nc可以作为调试和测试的工具,也可以用于网络安全评估和攻击等方向。下面是nc的详细使用教程:1.建立连接使用nc建立一个TCP连接非常简单。假设我们要连接192.168.0.1的80端口,可以执行以下命令:nc......
  • crm提示对象名CRM ProductUnit 无效
    1、服务模块操作的时候提示:--备份数据服务器上面执行脚本---产品单位IFNOTEXISTS(SELECT1FROMsysobjectsWHEREid=OBJECT_ID(N'CRM_ProductUnit')ANDOBJECTPROPERTY(id,N'IsUserTable')=1)BEGINCREATETABLECRM_ProductUnit([ID][INT]IDENTITYPRIMA......
  • 浅谈(0,eval)('window')
    浅谈(0,eval)('window')最近研究qiankun源码,在import-html-entry包中看到这个,一脸懵,研究了一下,记录一下。参考了这篇博客这个干啥用的 //通过这种方式获取全局window,因为script也是在全局作用域下运行的,所以我们通过window.proxy绑定时也必须确保绑定到全局window上......
  • 产品原型21-20230505
                                    ......