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}。

这个解决了代码覆盖率就正常了。

这里记录一下手动创建单元测试工程的步骤,以备日后查阅:

  1. 创建一个“Class Library”工程,添加Microsoft.VisualStudio.QualityTools.UnitTestFramework引用,和需要测试工程的应用
  2. 右键新建的工程-“Unload Project”;卸载了之后,再右键-“Edit xxxx.csproj”;在第一个ProjectGroup标签中加入<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>;保存之后就可以右键工程-“Reload Project”
  3. 右键Solution,创建新项,选择Test Setting,确定之后在弹出来的窗口按如下配置:(如果solution中已有Local.testsettings文件就不需要创建了,直接双击)

    点击config,选择需要测试工程的dll就可以了。

  4. 在VS菜单栏中选择Test-Windows-Code Coverage Results
  5. 完成,可以开始编写单元测试了

手动创建VS单元测试,显示代码覆盖率的更多相关文章

  1. Java开发工具IntelliJ IDEA单元测试和代码覆盖率图解

    原文 http://www.cnblogs.com/xiongmaopanda/p/3314660.html Java开发工具IntelliJ IDEA使用教程:单元测试和代码覆盖率 本文将展示如何使 ...

  2. Jenkins构建Android项目持续集成之单元测试及代码覆盖率

    单元测试 在软件开发中一直在推崇TDD(测试驱动开发),但是一直不能被有效的执行或者并不是真正的测试驱动开发(先开发后写单元测试),因为我们懒!而Android开发又是大多应用层面的开发,很多都是和视 ...

  3. Maven快速入门(二)手动创建maven项目hellomaven

    之前讲过Maven介绍及环境搭建,介绍了maven的作用和如何搭建maven环境.接下来就以一个helloworld的例子来说一说如何创建maven项目以及maven项目的项目结构,最后讲maven如 ...

  4. java web(一) 使用sql标签库+tomcat+mysql手动创建一个jsp练习总结

    2016-09-0111:06:53                                     使用sql标签库+tomcat+mysql手动创建一个jsp 1. 1.1安装tomcat ...

  5. servlet和手动创建servlet,断点调试

    1.    什么是Servlet Servlet是一种用Java语言编写的Web应用组件 Servlet主要用于动态网页输出,扩展了Web服务器的功能 Servlet由Servlet容器进行管理 2. ...

  6. 如何在JavaScript中手动创建类数组对象

    前言 关于什么是js的类数组对象这里不再赘述.可以参考这个链接,还有这里. js中类数组对象很多,概念简单的讲就是看上去像数组,又不是数组,可以使用数字下标方式访问又没有数组方法. 例: argume ...

  7. ogre3D学习基础16 -- 手动创建实体(ManualObject)

    这一节练习一下手动创建实体,用到了对象(ManualObject) 第一,依然是模板 #include "ExampleApplication.h" class Example1 ...

  8. Laravel中我们登录服务器通过 Tinker 手动创建后台管理用户

    Laravel中我们可以登录到服务器通过 Tinker 手动创建后台用户 laravel中tinker命令的作用是用来调试laravel,可以打印变量或对象信息,显示函数代码,对数据库写入和查询数据. ...

  9. NetworkX系列教程(3)-手动创建graph

    小书匠Graph图论 不可否认,日常中我们使用最多的还是,使用自己的数据去手动创建自己的图形,而不是使用生成器,现从给graph添加点和边入手,讲解手动创建graph. 目录: 3.给graph添加节 ...

随机推荐

  1. andriod adt和andriod sdk

    今天搭建appium的环境,没有太明白andriod adt和andriod sdk分别是什么东西,经过与开发沟通,大致了解如下,这里记录一下,免得过几天就搞忘了. andriod adt是一个插件, ...

  2. try-catch和throw,throws的区别

    java里的异常多种多样,这是一种非常有用的机制,它能帮助我们处理那些我们未知的错误,在java里,关于异常的有throw throws,还有一个try catch 程序块.接下来我们挨个看看这几个的 ...

  3. Java 线程 — ConcurrentHashMap

    ConcurrentHashMap ConcurrentHashMap 结构 采用了分段锁的方法提高COncurrentHashMap并发,一个map里面有一个Segment数组--即多个Segmen ...

  4. OpenCascade Modeling Algorithms Fillets and Chamfers

    Modeling Algorithms Fillets and Chamfers 造型算法——倒圆与倒角 eryar@163.com 一.倒圆Fillet Constructor 1. BRepFil ...

  5. .NET面试题解析(05)-常量、字段、属性、特性与委托

      系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 弱小和无知不是生存的障碍,傲慢才是!——<三体> 常见面试题目: 1. const和reado ...

  6. java中final注意的问题

    public class Test{ public static void main(String[] args){ Person p = new Person(); } } /* 4.修饰的变量是一 ...

  7. 精致3D图片切换效果,最适合企业产品展示

    这是一个精致的立体图片切换效果,特别适合企业产品展示,可立即用于实际项目中.支持导航和自动播放功能, 基于 CSS3 实现,推荐使用最新的 Chrome,Firefox 和 Safari 浏览器浏览效 ...

  8. 15 Best Responsive HTML5 Frameworks 2014

    Best HTML5 frameworks are most popular because with the use of these frameworks you can create websi ...

  9. Visual Studio开发Cordova应用示例

    作者:Grey 原文地址:http://www.cnblogs.com/greyzeng/p/5455728.html 本文的GIF动画均使用ScreenToGif进行录制. Cordova是什么? ...

  10. javascript设计模式实践之策略模式--输入验证

    策略模式中的策略就是一种算法或者业务规则,将这些策略作为函数进行封装,并向外提供统一的调用执行. 先定义一个简单的输入表单: <!DOCTYPE html> <html> &l ...