初识google test
gtest是google的一个开源项目,专门用来做单元测试的。学习难度不算非常的大,适用于多个平台。主要就是使用断言来判断代码的正确性。
在google test这个github中可以下载gtest的源码,并且在文件中有make文件夹,可以用terminal,make产生可执行文件,实际上在makefile里面写出了编译成可执行文件所需要的代码。可以打开这个文件改变其中的文件名参数,来编译不同的代码。阅读sample,也可以对gtest有大概的了解。
以下是我简单翻译的github上的知识介绍。
为什么选择gtest?
-
- 测试应该是独立的和可重复的。gtest通过以不同的对像来运行他们,从而分割不同的测试。
-
- 测试应该被很好的组织和反映测试代码的结构。
-
- 测试应该是可重用的和可移用的,能够用于不同的平台(操作系统)。
-
- 当测试失败时,提供足够多的信息。
-
- gtest可以使作者专心于测试的内容而不用在意其他的东西。
-
- 测试应该是迅速的。
基本概念
gtest通过断言(assertions)去测试代码的行为。一个test case可以有多个test,所以应该根据测试的框架去编写test。当多个tests在一个test case需要公用对象和子程序时,应该把他们放在test fixture 类中。
Assertion(断言)
gtest是通过断言来判定代码的行为的,如果断言失败了,gtest会输出断言的源文件和所在的行号。gtest提供两种版本的断言。
ASSERT_* 产生致命错误,直接导致函数终止。
EXPECT_* 产生非致命错误,函数继续运行。
因为ASSERT_失败时会直接导致程序终止,所以有可能直接掉过 clean-up的代码,从而导致内存泄露,所以需要格外的注意。
可以使用<<定值错误信息:
ASSERT_EQ(x.size(), y.size()) << "Vectors x and y are of unequal length";
for (int i = 0; i < x.size(); ++i) {
EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i;
}
任何可以被ostream接受的类型,都可以被定值为错误信息。
基本断言
这些断言是用来剪短的判断正误的。
| Fatal assertion | Nonfatal assertion | Verifies |
|---|---|---|
ASSERT_TRUE(condition); |
EXPECT_TRUE(condition); |
condition is true |
ASSERT_FALSE(condition); |
EXPECT_FALSE(condition); |
condition is false |
适用于:Linux, Windows, Mac.
二元比较
这些断言适用于比较两个数的。
| Fatal assertion | Nonfatal assertion | Verifies |
|---|---|---|
ASSERT_EQ(val1,val2); |
EXPECT_EQ(val1,val2); |
val1 == val2 |
ASSERT_NE(val1,val2); |
EXPECT_NE(val1,val2); |
val1 != val2 |
ASSERT_LT(val1,val2); |
EXPECT_LT(val1,val2); |
val1 < val2 |
ASSERT_LE(val1,val2); |
EXPECT_LE(val1,val2); |
val1 <= val2 |
ASSERT_GT(val1,val2); |
EXPECT_GT(val1,val2); |
val1 > val2 |
ASSERT_GE(val1,val2); |
EXPECT_GE(val1,val2); |
val1 >= val2 |
如果断言错误,则gtest会输出两个val。
两个参数一定都是可比较的,否则会出现编译错误。
值得注意的是,如果比较的是两个const char*,不要使用ASSERT_EQ(),因为他们会比较两个指针指向的地址是否是一样的,而不是比较他们的值。所以应该使用ASSERT_STREQ(),后面会提到。特别是,如果要比较null,应该这么使用ASSERT_STREQ(NULL, c_string)(因为NULL在宏定义中认为是0,在c++11中给出nullptr,可以解决这个问题。)。然而如果是string,则应该使用ASSERT_EQ()。
字符串比较
这里指的string其实是c string(char *)。
| Fatal assertion |
|---|

最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



