最近开始着手复习数据结构这门课程。

在写完了顺序表的代码后,突发奇想,觉得在 main 函数中写一些测试用例来看代码是否有误这种行为也太捞了,借助一些测试框架不是如鱼得水,还能学习新的知识,于是就打算使用 googletest 来对这些代码做测试(专业嘿嘿)。

踩坑开始

(不喜欢可以直接跳过)在网上看了一些教程后,我直接到 github 上下载这个项目,然后在 clion 中进行编译,没有报错,暗自窃喜

buile_success

然后我把编译好的 gtestd.lib 复制到我所写的数据结构代码的项目中,目录结构如下:

project_structure

CMakeLists

在进行编译时报错

在网上搜索了一些资料,由上图报错路径我们可以知道 Clion 在编译时,使用的是 14.15.26726 的 MSVC 编译器,所以把 gtestd.lib 拷贝到该版本 MSVC 编译器下的 X86 目录中:

msvc_dir

成功解决!然后点击编译后,新坑又来了:

mtd

MTd 和 MDd 不匹配,博主用 VS 时间比较长,此编译选项可以去 VS 的项目属性 -> C/C++ -> 代码生成 -> 运行库处修改,但是当我用 VS 打开 googletest 时,VS 并不能识别出该项目,所以就去另寻他法了。

正确方法

Clion 的官网中有一篇文章,介绍如何在 Clion 中使用 googletest:https://www.jetbrains.com/help/clion/creating-google-test-run-debug-configuration-for-test.html

文章写的感觉拐弯抹角,并不是很清晰,当然我照着配置了一遍是可以运行的(长舒一口气)。

我又尝试了几次,摸清楚其中的目录的组织结构。

比如现在我本地已经有创建好的 Clion 项目,我想在其中引入 googletest。可以直接在项目中创建个文件夹 lib

dir

把下载好的 googletest 源码直接解压在 lib 目录中

dir

然后在 Clion 中打开此项目,我们在 CMakeLists.txt 中加入一些语句,就可以使用 googletest 啦。举个例子,我们就拿 main.cpp 做一下测试,我的配置如下:

myconf

在 main.cpp 中加入以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include "gtest/gtest.h"

int add(int a, int b) {
return a + b;
}

TEST(add, zero) {
EXPECT_EQ(0, add(0, 0)) << "yes";
}

TEST(add, positive_number) {
EXPECT_EQ(3, add(1, 2));
}

TEST(add, negative_number) {
EXPECT_EQ(-3, add(-1, -2));
}

int main() {
::testing::InitGoogleTest();
return RUN_ALL_TESTS();
}

点击运行就可以啦:

victory

最后,表达一下悲愤的心情,真的折腾了好久(一个晚上 + 一个上午)

(也不知道为什么 hexo 无法识别 img 标签,所以图片也没法缩放或者横向排列,不想折腾了)

last