[C++]初识google test--单元测试神器

初识google test

gtest是google的一个开源项目,专门用来做单元测试的。学习难度不算非常的大,适用于多个平台。主要就是使用断言来判断代码的正确性。

google test这个github中可以下载gtest的源码,并且在文件中有make文件夹,可以用terminal,make产生可执行文件,实际上在makefile里面写出了编译成可执行文件所需要的代码。可以打开这个文件改变其中的文件名参数,来编译不同的代码。阅读sample,也可以对gtest有大概的了解。

以下是我简单翻译的github上的知识介绍。

为什么选择gtest?

    1. 测试应该是独立的和可重复的。gtest通过以不同的对像来运行他们,从而分割不同的测试。
    1. 测试应该被很好的组织和反映测试代码的结构。
    1. 测试应该是可重用的和可移用的,能够用于不同的平台(操作系统)。
    1. 当测试失败时,提供足够多的信息。
    1. gtest可以使作者专心于测试的内容而不用在意其他的东西。
    1. 测试应该是迅速的。

基本概念

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值