【GTest】C++单元测试框架 Google Test 的简单使用

1.简介

GTest 是一个跨平台的 (Liunx、Mac OS X、Windows、Cygwin、Windows CE and Symbian) C++单元测试框架,由google公司发布。

GTest 有如下特点:

  • 提供强大的断言集,支持包括布尔、整型、浮点型、字符串等
  • 提供断言方法自定义扩展
  • 自动收集测试用例,无需开发者再次组织
  • 提供死亡测试功能
  • 可以将公共的用例初始化和清理工作放入测试夹具中,由gtest自动调用
  • 使用参数化自动生成多个相似的测试用例

获取地址:https://github.com/google/googletest

2.初始化

在一切环境、编译等准备就绪后,开始 GTest 的学习。

下面针对我使用的 FCL 案例,来学习其中 GTEST 测试的部分:

// gtest 头文件
#include <gtest/gtest.h>

// main 函数,用于初始化 gtest 和运行所有的测试样例
int main(int argc, char* argv[])
{
    
    
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

我们在程序中创建了许多 TEST(详见后文),RUN_ALL_TESTS();可以批量地执行它们。

在终端中的结果输出为:

[==========] Running 5 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 5 tests from FCL_COLLISION

即,在我们的当前测试程序中,有一个测试样例,这个测试样例中包含了五个测试段,这五个 test 又都属于 FCL_COLLISION。具体内容详见后文所述。

3.使用

将我们要测试的函数加入到 GTEST 中:

GTEST_TEST(FCL_COLLISION, test_SplineMotion_rotated_spline_collide_test)
{
    
    
  test_SplineMotion_rotated_spline_collide_test<double>();
}
GTEST_TEST(FCL_COLLISION, OBB_Box_test)
{
    
    
  test_OBB_Box_test<double>();
}

GTEST_TEST(FCL_COLLISION, OBB_shape_test)
{
    
    
  test_OBB_shape_test<double>();
}

GTEST_TEST(FCL_COLLISION, OBB_AABB_test)
{
    
    
  test_OBB_AABB_test<double>();
}

GTEST_TEST(FCL_COLLISION, mesh_mesh)
{
    
    
  test_mesh_mesh<double>();
}

这里如果测试函数加入成功,则在执行时终端会打印:

[ RUN      ] FCL_COLLISION.test_SplineMotion_rotated_spline_collide_test

可以直观地看出GTEST_TEST中的参数与终端打印输出的关系。

在上述五个待测试函数中的结尾处,加入断言宏函数

EXPECT_TRUE(result.is_collide);

注,result.is_collide是自定义的 bool 类型的状态变量。

这样,我们就可以得知测试的结果。在终端显示为:

[       OK ] FCL_COLLISION.test_SplineMotion_rotated_spline_collide_test (0 ms)

注:

这里使用了 gtest 的断言(assertion)宏。包括:

  • ASSERT_XXX(condition),返回类型为successfatal failture
  • EXPECT_XXX(condition),返回类型为successnon-fatal failture

断言的结果是根据condition(expected, actual)返回的结果来判断的,若返回 false,则断言的结果为 failture。其中,fatal failture 会使程序直接退出,non-fatal failture 会返回错误信息,然后继续测试后续案例。所以在工程中,常用EXPECT_XXX宏函数。

主要的的EXPECT_XXXASSERT_XXX函数及其判断条件,如下两个表所示。

在这里插入图片描述

在这里插入图片描述
还有更多宏,可以自行去网上查找。

全部测试样例完成后,终端打印输出:

[----------] Global test environment tear-down
[==========] 5 tests from 1 test case ran. (3834 ms total)
[  PASSED  ] 5 tests.

猜你喜欢

转载自blog.csdn.net/qq_43557907/article/details/126118125