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:\Users\gwang\AppData\Local\Microsoft\VisualStudio\11.0\Extensions\usfoinpw.bve\OpenCover\OpenCover.Console.exe" -target:"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\MSTest.exe" -targetargs:/testcontainer:"bin\Debug\UnitTestProject1.dll" -filter:+[*]* -output:Coverage\CodeCoverageResults.xml -register:user -mergebyhash' />
<Exec Command='"C:\Users\gwang\AppData\Local\Microsoft\VisualStudio\11.0\Extensions\usfoinpw.bve\ReportGenerator\ReportGenerator.exe" -reports:Coverage\CodeCoverageResults.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:\Users\gwang\Documents\Visual Studio 2012\Projects\UnitTestProject1\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe
2>------ Rebuild All started: Project: UnitTestProject1, Configuration: Debug Any CPU ------
2> UnitTestProject1 -> C:\Users\gwang\Documents\Visual Studio 2012\Projects\UnitTestProject1\UnitTestProject1\bin\Debug\UnitTestProject1.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.0\Common7\IDE\MSTest.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 bin\Debug\UnitTestProject1.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:\Users\gwang\Documents\Visual Studio 2012\Projects\UnitTestProject1\UnitTestProject1\TestResults\gwang_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:\Users\gwang\Documents\Visual Studio 2012\Projects\UnitTestProject1\UnitTestProject1\Coverage\CodeCoverageResults.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:\Users\gwang\AppData\Local\Microsoft\VisualStudio\11.0\Extensions\usfoinpw.bve\OpenCover\OpenCover.Console.exe" -target:"C:\Users\gwang\Documents\Visual Studio 2015\Projects\WpfApplication1\packages\NUnit.ConsoleRunner.3.10.0\tools\nunit-console.exe" -targetargs:"bin\Debug\UnitTestProject1.dll" -filter:+[*]* -output:Coverage\CodeCoverageResults.xml -register:user -mergebyhash' />
<Exec Command='"C:\Users\gwang\AppData\Local\Microsoft\VisualStudio\11.0\Extensions\usfoinpw.bve\ReportGenerator\ReportGenerator.exe" -reports:Coverage\CodeCoverageResults.xml -targetDir:CodeCoverageHTML' />

</Target>

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

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

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

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

MSTest/NUnit 单元测试 代码覆盖率试用 OpenCover 和ReportGenerator的更多相关文章

  1. VS2015+NUnit+OpenCover 完成单元测试代码覆盖率测试

    1.VS2015+NUnit+OpenCover 完成单元测试代码覆盖率测试 https://download.csdn.net/download/qq_39441918/10522539 2.*注意 ...

  2. NUnit单元测试资料汇总

    NUnit单元测试资料汇总 从安装到配置 首先到官网http://www.nunit.org/下载如下图的资料,安装NUnit-2.6.1.msi包. 然后挂在VS2010外部工具这个地方来使用,工具 ...

  3. C# ~ NUnit单元测试

    单元测试 单元测试(Unit Test)的一个测试用例(Test Case)是一小段代码,用于测试一个小的程序功能的行为是否正常,保证开发的功能子项能正确完成并实现其基本功能.一个单元测试是用于判断某 ...

  4. NUnit单元测试

    单元测试对程序员来说是非常重要的一门技术,但是在实际编程中却往往被程序员所忽视.微软的VS开发工具为我们提供了强大的单元测试环境,在VS当中可以直接对类库项目进行测试,极大的方便了程序员的自我纠错能力 ...

  5. Nunit单元测试入门学习随笔(一)

    Nunit单元测试 一.插件安装与项目关联 选择工具~扩展和更新 点击联机~搜索Nunit安装图内三个插件 新建单元测试项目 勾选项目引用 二.Nunit学习 1.了解单元测试 单元测试在我的理解是测 ...

  6. 上传NUnit的单元测试结果和OpenCover的单元测试覆盖率到SonarQube服务中

    SonarQube.Scanner.MSBuild.exe begin /k:"OMDCCQuotes" /d:sonar.host.url="http://myip:9 ...

  7. NAnt打包使用MSTest进行单元测试的配置

    NAnt比较老的持续集成工具了,对于它的文章都停留在09年左右的,只有一些github上的老项目上可以很多的看见是使用这个进行集成的,估计这个当时老外用的非常多吧. 如题,NAnt如果使用单元测试,用 ...

  8. 使用MSTest进行单元测试

    我之前写过一篇XUNit的简介:使用Xunit来进行单元测试.Xunit在当时确实是一个最简单易用的测试框架,然而,随着发展,Xunit也变得复杂了不少,光写一个最简单的测试就要导入8个包. 如果在大 ...

  9. Visual Studio 2012使用NUnit单元测试实践01,安装NUnit并使用

    在Visual Studio 2012中,默认使用Microsoft自带的MS-Test测试框架.但,Visual Studio同样允许使用第三方测试框架,比如NUnit,xUnit,MbUnit,等 ...

随机推荐

  1. python 安装时,为何pip install不是内部或者外部命令错误解决办法

    新安装的python 环境,第一次pip  install 却报不是内部或者外部命令错误 首先检查一下环境变量,可能时你没有设置环境变量 再说一遍,安装python环境时,记得出了python.exe ...

  2. 利用python3 爬虫 定制版妹子图mzitu爬取

    在刚开始学爬虫的时候,用来练手的基础爬虫就是爬取各种妹子图片,前几天同时说了这个,便准备随便写一个...最后发现真是三天不练..什么都记不住了!!所以花了政治一天重新写了一个爬虫程序,并且支持按照时间 ...

  3. IDEA修改Maven全局配置

    在使用过程中发现,IDEA每次新建一个Project ,这个maven配置都会初始化默认的. 这里需要设置下全局配置: File -> Other Settings -> Settings ...

  4. ps aux详解(进程状态说明)

    linux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有 ...

  5. maven学习之路三

    我们在写代码的时候,有些项目会有重复代码,或者是重复项目结构,这样我们就可以用maven 生成一个项目的基本骨架,就像我之前介绍的哪个logindemo一样继承了webApp-achetype一样.我 ...

  6. (转)linux特殊文件名字删除不了怎么办

    1. 文件名含有特殊字符,直接使用 rm 可能删除不了,可以使用如下方法: 1) 使用 ls -i 查处该文件的 inode 号,假设为654321 2) 使用find命令删除 find ./ -in ...

  7. 防sql注入方法

    mysql_escape_string(strip_tags($arr)) /** * 函数名称:post_check() * 函数作用:对提交的编辑内容进行处理 * 参 数:$post: 要提交的内 ...

  8. 快读代码level.2

    long long read() { long long ans=0; char last=' ',ch=getchar();//last用来存正负号,并消去那些换行符,空格 ') { last=ch ...

  9. BZOJ2306 [Ctsc2011]幸福路径[倍增]

    这个有环的情况非常的讨厌,一开始想通过数学推等比数列的和,但是发现比较繁就不做了. 然后挖掘这题性质. 数据比较小,但是体力可以很接近1(恼怒),也就是说可能可以跳很多很多步.算了一下,大概跳了2e7 ...

  10. 【hiho1715】树的联通问题

    题目大意:给定一棵 1~n 标号的树.Tree[L,R]表示最少需要选择的边的数量使得 L~R 号点两两连通.求: \[ \sum_{L=1}^{n} \sum_{R=L}^{n} \operator ...