加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Google单元测试框架GoogleTest(gtest)

(2018-11-02 21:19:23)
分类: 工具

安装

cmake CMakeLists.txt
make 
生成两个静态库:libgtest.a libgtest_main.a
sudo cp libgtest*.a  /usr/lib 
sudo cp -r googletest/include /usr/include

写测试程序时 #include < gtest/gtest.h >

g++ -g sample.c sample_unittest.cc -o test -lgtest -lgtest_main -lpthread

术语

注意命名的区别:gtest中的TestCase实际上是通常意义下的TestSuite,Test是通常意义下的TestCase。test fixture的意义倒是一致。

Assertion

assertion有三种状态:success,nonfatal failure和fatal failure。

ASSERT_xxx : 产生fatal failure,如果当前点检测失败则退出当前函数。
EXPECT_xxx : 产生nonfatal failure,如果当前点检测失败则继续执行。

可以通过operator << 在失败的时候打印附加信息。

注册测试

* 使用TEST()宏定义test function
TEST(TestCaseName, TestName) {
  ... test body ...
}
第一个参数是TestCase的名字,第二个参数是Test的名字。它们不能带下划线。

* 使用test fixture复用配置

(1) 使用::testing::Test派生一个test fixture类。
(2) 在这个测试类中用protected来引导并声明测试目标。
(3) 如果需要,提供默认构造/析构函数或者SetUp()/TearDown()函数来准备和释放资源。
(4) 如果需要,定义被Tests共享的子程序。
(5) 使用TEST_F()来定义test function:
TEST_F(TestCaseName, TestName) {
  ... test body ...
}
TestCaseName需要用定义的test fixture类。

gtest会对由TEST_F()定义的每个Test在运行时生成一个全新的test fixture。在同一个TestCaseName下,不同的TestName有不同的test fixture。

* 使用参数化方案

(1) 使用testing::TestWithParam< T >派生类,其中T是需要参数化的参数类型。
(2) 使用TEST_P()定义test function。在TEST_P()宏里,使用GetParam()获取当前的参数的具体值。
(3) 使用INSTANTIATE_TEST_CASE_P()来定义要测试的参数范围。
第一个参数是TestCase的前缀,可以任意取。 
第二个参数是TestCase的名称,需要和之前定义的参数化的类的名称相同。 
第三个参数可以理解为参数生成器。

触发测试

int main(int argc, char **argv) {
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

或者在编译的时候链接libgtest_main.a库


gtest的安装和使用

玩转Google开源C++单元测试框架Google Test系列(gtest)

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有