手动创建VS单元测试,显示代码覆盖率
Visual Studio 号称有史以来最强大的IDE,确实如此。创建单元测试也是一键完成:在方法的代码块中右键“Create Unit Test…”,勾选测试项,填项目名,完成。VS就会自动帮你创建好了一个工程,直接写测试方法就好。这创建出来的工程也就是一个普通的类库(class library),所以今天我就打算手动创建一个单元测试工程,但是最后却发现总是无法显示代码覆盖率。
发现问题,解决问题:反复对比手动创建和自动创建的工程,所有的属性都没区别。但是有一点引起了我的注意,右键工程名-Add,区别出来了:

自动创建的Unit Test类库好像被打上了标签,能够被VS识别为单元测试工程。但是所有的工程属性对比后都一样,然后我就想到了另外一个文件.csproj,看这个后缀名就知道这个文件的作用了:C Sharp Project,用来记录工程项目的一些信息。对比这两个项目的.csproj文件就能找出来差别了,自动创建的单元测试工程多了一条标签:
1 <PropertyGroup> 2 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 3 <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> 4 <ProductVersion>8.0.30729</ProductVersion> 5 <SchemaVersion>2.0</SchemaVersion> 6 <ProjectGuid>{4D38A077-23EE-4E9F-876A-43C33433FFEB}</ProjectGuid> 7 <OutputType>Library</OutputType> 8 <AppDesignerFolder>Properties</AppDesignerFolder> 9 <RootNamespace>Example.ManualUnitTest</RootNamespace> <AssemblyName>Example.ManualUnitTest</AssemblyName> <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> <FileAlignment>512</FileAlignment> <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> </PropertyGroup>
多了ProjectTypeGuids这个标签,查了资料两个guid分别对应的是:
- Guid {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}: C# project
- Guid {3AC096D0-A1C2-E12C-1390-A8335801FDAB}: “Test Project Flavor”
这样子VS就能识别出这个项目是个Test Project了。如果是VB.net工程的话,第一个GUID就要换成{F184B08F-C81C-45F6-A57F-5ABD9991F28F}。
这个解决了代码覆盖率就正常了。
这里记录一下手动创建单元测试工程的步骤,以备日后查阅:
- 创建一个“Class Library”工程,添加Microsoft.VisualStudio.QualityTools.UnitTestFramework引用,和需要测试工程的应用
- 右键新建的工程-“Unload Project”;卸载了之后,再右键-“Edit xxxx.csproj”;在第一个ProjectGroup标签中加入<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>;保存之后就可以右键工程-“Reload Project”
- 右键Solution,创建新项,选择Test Setting,确定之后在弹出来的窗口按如下配置:(如果solution中已有Local.testsettings文件就不需要创建了,直接双击)
点击config,选择需要测试工程的dll就可以了。
- 在VS菜单栏中选择Test-Windows-Code Coverage Results
- 完成,可以开始编写单元测试了
手动创建VS单元测试,显示代码覆盖率的更多相关文章
- Java开发工具IntelliJ IDEA单元测试和代码覆盖率图解
原文 http://www.cnblogs.com/xiongmaopanda/p/3314660.html Java开发工具IntelliJ IDEA使用教程:单元测试和代码覆盖率 本文将展示如何使 ...
- Jenkins构建Android项目持续集成之单元测试及代码覆盖率
单元测试 在软件开发中一直在推崇TDD(测试驱动开发),但是一直不能被有效的执行或者并不是真正的测试驱动开发(先开发后写单元测试),因为我们懒!而Android开发又是大多应用层面的开发,很多都是和视 ...
- Maven快速入门(二)手动创建maven项目hellomaven
之前讲过Maven介绍及环境搭建,介绍了maven的作用和如何搭建maven环境.接下来就以一个helloworld的例子来说一说如何创建maven项目以及maven项目的项目结构,最后讲maven如 ...
- java web(一) 使用sql标签库+tomcat+mysql手动创建一个jsp练习总结
2016-09-0111:06:53 使用sql标签库+tomcat+mysql手动创建一个jsp 1. 1.1安装tomcat ...
- servlet和手动创建servlet,断点调试
1. 什么是Servlet Servlet是一种用Java语言编写的Web应用组件 Servlet主要用于动态网页输出,扩展了Web服务器的功能 Servlet由Servlet容器进行管理 2. ...
- 如何在JavaScript中手动创建类数组对象
前言 关于什么是js的类数组对象这里不再赘述.可以参考这个链接,还有这里. js中类数组对象很多,概念简单的讲就是看上去像数组,又不是数组,可以使用数字下标方式访问又没有数组方法. 例: argume ...
- ogre3D学习基础16 -- 手动创建实体(ManualObject)
这一节练习一下手动创建实体,用到了对象(ManualObject) 第一,依然是模板 #include "ExampleApplication.h" class Example1 ...
- Laravel中我们登录服务器通过 Tinker 手动创建后台管理用户
Laravel中我们可以登录到服务器通过 Tinker 手动创建后台用户 laravel中tinker命令的作用是用来调试laravel,可以打印变量或对象信息,显示函数代码,对数据库写入和查询数据. ...
- NetworkX系列教程(3)-手动创建graph
小书匠Graph图论 不可否认,日常中我们使用最多的还是,使用自己的数据去手动创建自己的图形,而不是使用生成器,现从给graph添加点和边入手,讲解手动创建graph. 目录: 3.给graph添加节 ...
随机推荐
- ASP.NET MVC中简单使用Autofac
项目中引入Autofac的目的是为了实现控制反转,即IoC,Inversion of Control.控制反转可以有效的降低类之间的相互依赖关系,增加架构的弹性,降低软件复杂度. 示例代码: IPro ...
- 利用深搜和宽搜两种算法解决TreeView控件加载文件的问题。
利用TreeView控件加载文件,必须遍历处所有的文件和文件夹. 深搜算法用到了递归. using System; using System.Collections.Generic; using Sy ...
- Java - IDE
JDK安装及环境变量配置 下载安装对应版本的JDK 控制面板--->系统--->属性--->高级系统设置--->环境变量 新建系统变量JAVA_HOME 变量名:JAVA_HO ...
- MySql操作时间
今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 7天 DAY) <= date(时间字段名) 近30天 DAY) &l ...
- 编译Linux内核
下面的实验以 debian7.5 64bit 为例. 获取源码 获取 debian7.5 本身的源码非常简单: sudo apt-get install linux-source https://ww ...
- HT for Web基于HTML5的图像操作(一)
HT for Web独创的矢量图片设计架构,使其具有强大丰富的动态图形呈现能力,但从最近知乎热议的“Adobe Photoshop 是否已经过时?”的话题,大家能体会到很多情况下实际项目不可能完全采用 ...
- EF总结
1.Entity Framework 查询历史最严重bug求解十万火急 2.http://www.cnblogs.com/badly1984/p/3203565.html 3.Entity Frame ...
- 【Swift学习】Swift编程之旅---控制流(九)
Swift提供了类似C语言的流程控制结构,包括可以多次执行任务的for和while循环,基于特定条件选择执行不同代码分支的if和switch语句,还有控制流程跳转到其他代码的break和continu ...
- PHP的反射机制
在面向对象中最经典的使用就是反射,之前在Java语言中,使用反射可以解耦,用于依赖注入. 在PHP中,同样也有如此强大的地方,我们利用反射来获取一个对象的实例. 首先我们先写一个类: class Te ...
- 能不能用javascript实现素数求和问题呢?
先自己试试吧 好吧,下面这段代码用了别人所说的最笨的方法,身为小白的我只能呵呵.待会再尝试用其他算法. <!DOCTYPE html> <html lang="en&quo ...