我主要是想使用单元测试,VS2010是有自己的单元测试的,虽然我不抵触Microsoft的东西,但是自己做的非工业级的东西,去用Microsoft的解决方案是找罪受~所以使用了Google的测试方案。主要查阅了国外的一篇资料,虽然那位写得实在简略,但写得还是不错的,我补充梳理了一下。

下载部署GTest

首先去下载Google Test,网址为http://code.google.com/p/googletest/。我写此文的时候是1.6版。
解压之,因为要反复使用,所以最好放到固定的目录。我解压到了D:\Selah\VSProjects\Source下。打开解压后的目录,结构如下:

其中要接触的目录有:

../ - 即D:\Selah\VSProjects\Source\gtest-1.6.0,我把它设置为$(GTest),这样就不用每次写一长串路径了。
include - 包含目录,里边有头文件,测试时要用到。
msvc - Visual Studio的项目工程文件,已经配置好了的,用它生成二进制库。

运行msvc下的gtest.sln文件,它会提示自动升级为新的解决方案,然后生成即可。记得Debug和Release都要生成,分别用于测试Debug和Release方案的代码。我使用的是以下4个文件,还可以使用另外一个.sln文件,请自行文档之~

msvc\gtest\Debug - Debug方案下的二进制文件:gtestd.lib、gtest_maind.lib(注意主文件名的d后缀)
msvc\gtest\Release - Release方案下的二进制文件:gtest.lib、gtest_main.lib

Solution配置

为了让测试和程序运行互不干扰,老外将待测试模块和程序入口分离为两个项目,这样程序和GTest都可以访问待测试模块,互不冲突。最简单的情况下,Solution下有3个Project:

BaseCode - 待测试模块。我是要做单元测试的,所以头文件里要包含信息。(比如你要测试void Foo(),起码要在头文件里Declare一下吧~)
RunBaseCode - 程序入口。就是将程序一分为二为两部分。程序入口调用BaseCode生成的模块,实现程序功能。
TestBaseCode - 测试程序。这个是书写GTest测试用例的Project。除了要调用BaseCode生成的模块(否则你测试个毛线啊)。并且,他还要调用GTest的模块(否则你用毛线测试啊)。

另外就是路径问题,为了简便,我把路径写成了宏。宏保存在项目属性表里,这个表除了可以保存宏,还能保存后边提到的路径,可以备份了下次直接用。

具体过程不说了,这图一看就懂吧,之后就可以使用$(GTest)代替那长串路径了。

Project - BaseCode配置

Debug/Release通用:

项目属性 - 配置属性 - 常规: 配置类型 = 静态库(.lib)。你也可以用动态库,不过要或重新编译GTest,具体文档之~静态库很好的,不要看不起他。

Debug:

项目属性 - 配置属性 - C/C++ - 代码生成: 运行库 = 多线程调试(/MTd)。如果不这么做,结果就是报错~

Release:

项目属性 - 配置属性 - C/C++ - 代码生成: 运行库 = 多线程(/MT)。如果不这么做,结果就是报错~

Project - RunBaseCode配置:

因为要调用BaseCode的lib,所以配置一下项目依赖项(依赖BaseCode)。要不然,BaseCode还没生成呢,就开始生成RunBaseCode,结果只能是报错。

Debug/Release通用:

项目属性 - 通用属性 - 框架和引用: 添加对BaseCode的引用。感觉和.Net的程序集引用有点像。如果不这么干(比如对此有很深的厌恶之情),可以配置附加库路径以及附加依赖项(配置TestBaseCode时有介绍)。

项目属性 - 配置属性 - C/C++ - 常规: 附加包含目录 += $(SolutionDir)\BaseCode。其实是可有可无,如果设置了,引用头文件可以使用:

#include <BaseCode.h>

否则,就只能使用相对或者绝对路径了:

#include "../BaseCode/BaseCode.h

Project - TestBaseCode配置

除了和RunBaseCode相同的配置外(因为它也要调用BaseCode.lib,重复工作我不写了),还要进行如下配置。

Debug/Release通用:

项目属性 - 配置属性 - C/C++ - 常规: 附加包含目录 += $(GTest)\include。这样方便包含GTest的头文件。
项目属性 - 配置属性 - 连接器 - 常规: 附加库目录 += $(GTest)\msvc\gtest\$(IntDir)。如果之前没有引用BaseCode,要在这里做类似设置。

Debug:

项目属性 - 配置属性 - C/C++ - 代码生成: 运行库 = 多线程调试(/MTd)。如果不这么做,结果就是报错~(和BaseCode的设置相同)
项目属性 - 配置属性 - 连接器 - 常规: 附加依赖项 += gtestd.lib;gtest_maind.lib。如果之前没有引用BaseCode,要在这里做类似设置。

Release:

项目属性 - 配置属性 - C/C++ - 代码生成: 运行库 = 多线程(/MT)。如果不这么做,结果就是报错~(和BaseCode的设置相同)
项目属性 - 配置属性 - 连接器 - 常规: 附加依赖项 += gtest.lib;gtest_main.lib

生成即测试

老外果然有思路。这样配置了TestBaseCode,就不用执行它了,每次生成解决方案,就会自动执行测试。

项目属性 - 配置属性 - 生成事件 - 后期生成事件: 命令行 = $(TargetDir)$(TargetFileName)。效果:

如果执行测试的exe文件,会一闪而过,可以放到cmd里边执行。效果还是不错的。Over~~

[C++]在Visual Studio 2010中使用Google Test - 配置相关推荐

  1. 详解Visual Studio 2010中QT环境搭建配置

    本文将介绍如何在Visual Studio 2010中配置Qt这个跨平台应用程序和UI开发框架. QT简介 Qt是一个跨平台应用程序和UI开发框架.它包括跨平台类库.集成开发工具和跨平台 IDE.使用 ...

  2. 在Visual Studio 2010中创建多项目(解决方案)模板【三】

    前文回顾: 在Visual Studio 2010中创建多项目(解决方案)模板[一]:多项目解决方案模板的创建 在Visual Studio 2010中创建多项目(解决方案)模板[二]:Templat ...

  3. 一起谈.NET技术,Visual Studio 2010 中的代码约定设置

    软件约定称为代码约定,通过这一约定可以表示代码正常工作所需的正式条件. 如果方法未按预期收到数据或生成的数据不符合预期的后置条件,代码约定将导致代码引发异常. 有关前置条件和后置条件的概述,您可能需要 ...

  4. 如何在Visual Studio 2010中使用CppUTest建立TDD的Code Kata的环境

    CppUTest 是一个功能全面的测试框架,是为了支持在多种操作系统上开发嵌入式软件而特别设计的.CppUTest的宏被设计成不需要了解C++也可以写测试用例.这使得C程序员更容易用这个测试框架. 那 ...

  5. VB:使用Visual Studio 2010中的VB语言工具箱DataGridView调用SQL数据库Database的表格文件

    VB:使用Visual Studio 2010中的VB语言工具箱DataGridView调用SQL数据库Database的表格文件 目录 问题探究 图文教程 问题探究 使用Visual Studio ...

  6. Visual Studio 2010中C++项目升级指南

    如何升级? Visual Studio 2010支持来自VC6.Visual Studio 2002.Visual Studio 2003.Visual Studio 2005和Visual Stud ...

  7. 在Visual Studio 2010 中使用菱形向导对窗口进行布局

    "一个移动机器人,需要花大量的时间来进行运算,才可以避开环境中的简单的障碍物.人类也一样,只不过他们从未意识到罢了-直到光明消失在地平线.伴随着痛苦,他们才真正体会到需要进行的运算有多少.& ...

  8. Visual Studio 2010 中JS注释制作

    Visual Studio 2010中的js注释已经很强大了,但怎么才能和调用c#的方法一样容易呢?怎样才能让每个参数都有注释说明呢?底下就是想要的答案. 先上图,如图所示: 其中红色的办法为注释效果 ...

  9. 图解Visual Studio 2010中的UML建模功能

    Visual Studio 2010在架构和项目管理方面的功能增加让人眼前一亮,之前曾详细介绍过Visual Studio 2010新增的架构工具,包括通过可视化技术DGML提供直观的图表,依赖图,继 ...

最新文章

  1. zookeeper设置临时节点失效时间_ZooKeeper 相关概念以及使用小结
  2. wget: unable to resolve host address “http”
  3. 槽函数会被执行多次的问题原因及解决方法
  4. 简单java在线测评程序
  5. Android内存泄漏的各种原因详解
  6. X-006 FriendlyARM tiny4412 u-boot移植之Debug串口用起来
  7. php论坛有哪些_2020面向PHP的5个最佳框架,解释了为什么选择它们
  8. 公众号内打开提示404_微信公众号文章“号内搜”新功能玩法
  9. 【Golang】Go语言defer用法大总结(含return返回机制)
  10. 基于vc的freetype字体轮廓解析_才一年,长安又换新LOGO,连带字体也升级了,你喜欢吗?_搜狐汽车...
  11. python编程手机_手机最强Python编程神器,在手机上运行Python
  12. 基于MATLAB的答题卡识别系统
  13. 大气压力换算公式_压强单位bar,psi,pa,mpa,kg换算公式
  14. 简易矩阵乘法计算器2.0
  15. IIR和FIR滤波器设计低通滤波器
  16. 域名链接到服务器指定端口
  17. consul服务发现入门篇
  18. 如何在WPS、Word里插入高亮代码块
  19. 带你认识六种设计原则(开闭原则、里氏代换原则、依赖倒转原则....)
  20. 医学图像分割之Attention U-Net

热门文章

  1. c iostream.源码_通达信《K线上画趋势线预警》精选指标(附源码)
  2. php珠心算源码,深度解析珠心算的“开智”功能
  3. mysql ignore 1 lines_MYSQL使用笔记(1)
  4. c语言malloc calloc,C语言内存管理:malloc、calloc、free的实现
  5. java 实现nfa的化简_DFA与NFA的等价性,DFA化简
  6. 百兆光纤收发器和千兆光纤收发器的区别
  7. 低功耗无线模块超远距离无线传输实现中继的方法
  8. 【工业级串口服务器E810-DTU】RS485/RS232转以太网,双向透明传输
  9. 怎么设置php的css颜色代码,CSS的文本字体颜色如何设置
  10. 移动流量转赠给好友_私域流量的五大认知误区