• [C++]在Visual Studio 2010中使用Google Test 配置


    我主要是想使用单元测试,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.libgtest_maind.lib(注意主文件名的d后缀)
    msvc\gtest\Release - Release方案下的二进制文件:gtest.libgtest_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~~

  • 相关阅读:
    又是七月的尾巴
    在Macbook Air上安装Archlinux
    又是一年毕业季
    orgpage a static site generator for emacs and org mode
    看完了《三体》三部曲
    暴强的命令行git提交历史记录查询
    xaml的window的AllowsTransparency属性在winxp下好像有bug,不知还有谁遇到过
    Swift 计算字符串展示的区域
    SwiftUI Stack中的View被压缩的效果
    如果git pull拉取分支出错,如何返回
  • 原文地址:https://www.cnblogs.com/SelaSelah/p/2442525.html
Copyright © 2020-2023  润新知