一、背景
关于googletest
之前的博客已经详细地做了一个叙述:参考链接
现在想再自己写的一个Demo
中引入googletest
并且采用测试驱动开发(Test-Driven Development,TDD)(即:先写测试案例,再完善功能代码,一边写、一边完善)的这种模式。现在将这过程中踩的坑,总结成此博客。
二、资源准备
2.1 源码链接
https://gitcode.net/mirrors/google/googletest?utm_source=csdn_github_accelerator
2.2 解压编译
①解压缩后得到如下文件:
②通过VS打开gtest中的CMakeList:
路径为:
googletest-master\googletest-master\CMakeLists.txt
③编译静态库:
2.3 获取生成库和头文件
生成完成后在路径下得到4个静态库:
googletest-master\googletest-master\out\build\x64-Debug\lib
注意:带d的是Windows的debug版本库,不带d的是Windows的release版本库
获取头文件:
googletest-master\googletest-master\googletest\include
三、准备Demo
3.1 新建一个工程文件
3.2 新建一个lib
和inlucde
文件
将4个编译好的静态库文件放入lib
将gtest文件放入inlucde中
3.3 将【静态库文件夹、头文件、静态库】引入项目
参考只都一本心术书的博客
①引入头文件夹: 项目–配置属性–c/c+±-常规–附加包含目录–编辑–添加工程
include
路径(考虑到工程的可移植性,可以用右下角的宏定义对路径进行简略)比如$(ProjectDir)/include
②引入lib文件夹: 项目–配置属性–链接器–常规–链接库依赖项–编辑–添加工程lib路径
(这里你可能会遇到没有链接器这个子选项的问题,解决方法:项目–属性–配置属性–常规–配置类型–选择动态链接库或者应用程序–应用)
include
路径(考虑到工程的可移植性,可以用右下角的宏定义对路径进行简略)比如$(ProjectDir)/include
③引入库: 项目–配置属性–链接器–输入–附加依赖项
四、报错警告
引入之后,我们发现项目已经可以找到头文件了并且编译通过
但是引入测试代码的时候缺报错了:error LNK2038: 检测到“RuntimeLibrary”的不匹配项
原因:项目文件编译方式和库文件不匹配
库文件是MTD_StaticDebug,项目文件编译方式是MTD_DynamicDebug
参考链接
这四个选项对应的含义如下:
选项 | 编译方式 |
---|---|
多线程调试Dll (/MDd) | MD_DynamicDebug |
多线程Dll (/MD) | MD_DynamicRelease |
多线程(/MT) | MD_StaticRelease |
多线程(/MTd)(/MDd) | MD_StaticDebug |
但是有时候你会发现并不是这么简单,明明自己用的是Release模式,为什么选/MD还是会报错呢?
这个原因在于你在:工程属性->链接器->输入->附加依赖项
中添加的.lib
有问题。一般lib
文件会有后缀带d和不带d
的两种,带d
的对应的是Debug
模式,不带d
的对应的是Release
模式。把这个改过来说不定就能解决你的问题了。
五、测试代码
#include<iostream>
#include"gtest/gtest.h"
using namespace std;
int main(int argc, char** argv)
{
EXPECT_EQ(1 + 1, 2);
testing::InitGoogleTest(&argc, argv);
RUN_ALL_TESTS();
return 0;
}
运行结果:
六、开始写Demo
采用测试驱动开发去写你的Demo
吧!冲!冲!冲!