Google 单元测试框架

Gtest Github
使用 gtest(gmock) 方便我们编写组织 c++ 单元测试。

编译 lib

到 github 拉取代码或者下载某个版本的 zip 包到本地目录,参考 gtest 中的 README.md 如何编译库和编译自己的代码,下面简单介绍下编译方法

手动编译

$ g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \
    -pthread -c ${GTEST_DIR}/src/gtest-all.cc
$ ar -rv libgtest.a gtest-all.o

cmake 编译

gtest 已经提供了 cmakelist,可以直接使用cmake 生成 makefile, 编译库和 sample

$ mkdir mybuild       # Create a directory to hold the build output.
$ cd mybuild
$ cmake ${GTEST_DIR}  # Generate native build scripts.
$ make

然后就可以在编译自己的测试程序时链接 gtest 了。

$ g++ -isystem ${GTEST_DIR}/include -pthread path/to/your_test.cc libgtest.a -o your_test

跟多详细内容参考 readme 和代码中提供的例子(samples ; make 目录下),比如如何解决重复定义宏等问题。

gtest 测试程序

通过 编程参考源码中 sample 目录下的示例,我们可以很快上手 gtest。gtest 定义了宏供我们写断言语句,一个或者多个断言组成我们的测试用例 case,多个测试用例有时候需要共享一些通用对象,可以把这些用例放在同一个 fixture 中。

断言和 case

gtest 断言提供两个版本
* ASSERT_* 版本断言,在同一个 case 中(测试函数)中,ASSERT_* 失败就会终止当前用例,开始其他 case ;
* EXPECT_*版本,当断言失败时,会报错,但是会继续执行剩余语句。

完整的 宏定义, 或见源码 include/gtest/gtest.h

使用哪种语句断言取决自己用例场景,如当前语句失败时后续语句没有继续执行意义,则可以直接使用 ASSERT 终止,否则使用 EXPECT 可以发现更多错误。

如果用例之间不需要什么公用资源,相互独立,可以使用如下方式定义每一个 case

TEST(套件名,用例名)
{
    //套件名和用例名自定义
    //断言语句
    //如一般的c++ 函数,不 return value 
}

进入目录 sample 中, 以 sample1_unittest.cc 为例子

#include "sample1.h"  // 测试对象头文件,接口
#include "gtest/gtest.h"  // gtest 头文件

TEST(IsPrimeTest, Negative) {
    EXPECT_FALSE(IsPrime(-1)) << "这样子失败时打印自己的信息"; 
    EXPECT_FALSE(IsPrime(-2)); // 如果此断言失败,还会继续执行下一个
    EXPECT_FALSE(IsPrime(INT_MIN));
  }

TEST(IsPrimeTest, Negative) {
    EXPECT_FALSE(IsPrime(-1));
    ASSERT_FALSE(IsPrime(-2)); // 如果此断言失败,下一条不
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值