# GoogleTest 单元测试框架 **Repository Path**: yami0109/google-test-warehouse ## Basic Information - **Project Name**: GoogleTest 单元测试框架 - **Description**: GoogleTest是一个跨平台的(Liunx、Mac OS X、Windows、Cygwin、Windows CE and Symbian)C++单元测试框架。本文主要跟大家分享一下 GTest 的安装以及GTest的断言、致命和非致命判断、参数化、事件机制(全局事件、TestSuite 事件和 TestCase 事件)、”死亡测试”等; - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-10-09 - **Last Updated**: 2024-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GoogleTest warehouse #### 介绍 GoogleTest是一个跨平台的(Liunx、Mac OS X、Windows、Cygwin、Windows CE and Symbian)C++单元测试框架。本文主要跟大家分享一下 GTest 的安装以及GTest的断言、致命和非致命判断、参数化、事件机制(全局事件、TestSuite 事件和 TestCase 事件)、”死亡测试”等; #### 软件架构 软件架构说明及使用说明: 0.googletest 是下载的googleTest的源码; 1.CaseTestSmpl是测试案例(TestCase)事件机制实现示例; 2.SuiteTestSmpl是测试套件(TestSuite)事件事件机制实现示例; 3.GlobalTestSmpl是全局事件机制实现示例; 4.EventTestSmpl是事件机制(全局事件、TestSuite 事件和 TestCase 事件)综合实现示例,以及ASSERT_*系列的断言和EXPECT_*系列的断言示例; EXPECT_*系列的断言,; 5.ParamTestSmpl是参数化实现示例; 6.DeathTestSmpl 死亡测试简单示例; 7.testx是单独编译的sample示例; 以测试框架依赖于googletest文件夹下的include文件以及编译生成的lib库文件; 编译方式:下载源码,进入build,然后执行make即可 gtest_gmock_test包含了单独的googletest头文件和库文件,可以单独编译。 编译方式:下载源码,进入build,执行: cmake . make #### googleTest的安装 1.下载googletest源码以及并解压到googletest文件夹下 git clone https://github.com/google/googletest.git 2.顺序执行下面命令完成安装。 cd googletest mkdir build && cd build cmake -DCMAKE_CXX_STANDARD=17 .. make sudo make install //安装到当前系统 不需要安装可不执行 ####gTest测试笔记: ### gtest系列之TEST宏 TEST(test_case_name, test_name) TEST_F(test_fixture,test_name) //多个测试场景需要相同数据配置的情况,用TEST_F。TEST_F test fixture,测试夹具,测试套,承担了一个注册的功能。 TEST_P(test_case_name, test_name) //配合TestWithParam模版类和INSTANTIATE_TEST_CASE_P实现测试案例的参数化。 TEST宏的作用是创建一个简单测试,它定义了一个测试函数,在这个函数里可以使用任何C++代码并使用提供的断言来进行检查。 TEST_P详细介绍见https://blog.csdn.net/pillary/article/details/78014563 ### gtest系列之断言 gtest中断言的宏可以分为两类:一类是ASSERT宏,另一类就是EXPECT宏了。 1.ASSERT_*系列的断言,当检查点失败时,退出当前函数。(注意:并非退出当前案例)。 2.EXPECT_*系列的断言,当检查点失败时,继续往下执行。 如果你对自动输出的错误信息不满意的话,也是可以通过operator<<能够在失败的时候打印日志,将一些自定义的信息输出。 ### gtest中的事件机制  gtest中的事件机制是指在测试前和测试后提供给用户自行添加操作的机制,而且此机制也可用让同一测试套件下的测试用例共享数据。 1.TestCase事件:每个案例执行前后,隐式执行SetUp和TearDown;成员量生命周期为单个测试案例。 2.TestSuite事件:在某一批案例中,第一个执行前到最后一个执行后,调用SetUpTestCase和TearDownTestCase;成员变量shared_唯一。 3.全局事件:所有案例执行前后,调用 SetUp和TearDown;成员变量全局有效;必须要有main函数来注册全局事件 可用于组合类行为测试 ### gTest参数化 防止写很长的EXPECT_XX可以参数化测试案列,实现相同类型参数的多个测试用例的测试。参数化步骤如下: 1.添加类 继承自 public::testing::TestWithParam 例如: class IsPrimeParamTest:public::testing::TestWithParam{}; 2.获取参数并测试 TEST_P(IsPrimeParamTest, ExpectTrueReturn) { int n = GetParam(); EXPECT_TRUE(IsPrime(n)); } 3.告诉gtest你的测试参数 INSTANTIATE_TEST_SUITE_P(TrueReturn, IsPrimeParamTest, testing::Value(3,5,11,23,27)); //第三个参数 还可以是 //Range(begin, end[, step]) 如:testing::Range(3,10,2) 等同于 testing::Value(3,5,7,9) //ValuesIn(容器和c数组) ValuesIn(begin,end) 如 testing::ValuesIn(vector) Int a[]={3,5,11,23}; testing::Values(a); //Bool() 分别取true和false //combine(g1,g2,...,gn) 排列组合,g1,g2,...,gn代表具体参数 ### gtest死亡测试 gtest系列之死亡测试 这里的”死亡”指的是程序的奔溃。通常在测试的过程中,我们需要考虑各种各样的输入,有的输入可能直接导致程序奔溃,这个时候我们就要检查程序是否按照预 期的方式挂掉,这也就是所谓的”死亡测试”。 死亡测试所用到的宏。 1>、ASSERT_DEATH(参数1,参数2),程序挂了并且错误信息和参数2匹配,此时认为测试通过。如果参数2为空字符串,则只需要看程序挂没挂即可。 2>、 ASSERT_EXIT(参数1,参数2,参数3),语句停止并且错误信息和被提前给的信息匹配。