目录
1.介绍2.安装3.使用1.头文件包含2.框架初始化接口3.调用测试样例4.TEST宏5.断言宏6.示例
1.介绍
gtest
是一个跨平台的C++单元测试框架,由Google公司发布gtest
是为了在不同平台上为编写C++单元测试而生成的,它提供了丰富的断言、致命和非致命判断、参数化等等测试所需的宏,以及全局测试,单元测试组件 2.安装
直接命令安装:sudo apt install libgtest-dev
3.使用
1.头文件包含
#include <gtest/gtest.h>
2.框架初始化接口
testing::InitGoogleTest(&argc, argv);
3.调用测试样例
RUN_ALL_TESTS();
4.TEST宏
此处不需要双引号括住文本内容,且同测试下多个测试样例不能同名TEST(测试名称, 测试样例名称){// do somethinh}TEST_F(text_fixture, test_name){// do something}
TEST
:主要用来创建一个简单测试,它定义了一个测试函数,在这个函数中可以使用任何C++代码并且使用框架提供的断言进行检查TEST_F
:主要用来进行多样测试,适用于多个测试场景如果需要相同的数据配置的情况, 即相同的数据测不同的行为 5.断言宏
gtest
中的宏可以分为两大类: ASSERT_
系列:如果当前点检测失败则退出当前测试用例EXPECT_
系列:如果当前点检测失败则继续往下执行 常用断言介绍: bool
值检查: ASSERT_TRUE(参数)
:期待结果是true
ASSERT_FALSE(参数)
:期待结果是false
数值型数据检查: ASSERT_EQ(参数1,参数2)
:equal
,传入的是需要比较的两个数ASSERT_NE(参数1,参数2)
:not equal
,不等于才返回true
ASSERT_LT(参数1,参数2)
:less than
,小于才返回true
ASSERT_GT(参数1,参数2)
:greater than
,大于才返回true
ASSERT_LE(参数1,参数2)
:less equal
,小于等于才返回true
ASSERT_GE(参数1,参数2)
:greater equal
,大于等于才返回true
6.示例
main.cc
:#include <iostream>#include <gtest/gtest.h>int Add(int x, int y){ return x + y;}TEST(Plus_Test, Equal){ ASSERT_EQ(Add(10, 10), 20);}TEST(ERROR_TEST, NE){ ASSERT_EQ(Add(10, 10), 30);}TEST(EXPECT_TEXT, EXPECT){ EXPECT_LT(Add(20, 20), 10); std::cout << "Output in EXPECT_TEST, but after EXPECT_LT" << std::endl; ASSERT_EQ(Add(10, 10), 30); std::cout << "Output in EXPECT_TEST" << std::endl;}int main(int argc, char* argv[]){ // Init Test Module testing::InitGoogleTest(&argc, argv); // Invokle all tests return RUN_ALL_TESTS();}
makefile
:main:main.ccg++ -o $@ $^ -std=c++17 -lgtest.PHONY:cleanclean:rm main
运行示例:$ ./main [==========] Running 3 tests from 3 test suites.[----------] Global test environment set-up.[----------] 1 test from Plus_Test[ RUN ] Plus_Test.Equal[ OK ] Plus_Test.Equal (0 ms)[----------] 1 test from Plus_Test (0 ms total)[----------] 1 test from ERROR_TEST[ RUN ] ERROR_TEST.NEmain.cc:16: FailureExpected equality of these values: Add(10, 10) Which is: 20 30[ FAILED ] ERROR_TEST.NE (0 ms)[----------] 1 test from ERROR_TEST (0 ms total)[----------] 1 test from EXPECT_TEXT[ RUN ] EXPECT_TEXT.EXPECTmain.cc:21: FailureExpected: (Add(20, 20)) < (10), actual: 40 vs 10Output in EXPECT_TEST, but after EXPECT_LTmain.cc:25: FailureExpected equality of these values: Add(10, 10) Which is: 20 30[ FAILED ] EXPECT_TEXT.EXPECT (0 ms)[----------] 1 test from EXPECT_TEXT (0 ms total)[----------] Global test environment tear-down[==========] 3 tests from 3 test suites ran. (0 ms total)[ PASSED ] 1 test.[ FAILED ] 2 tests, listed below:[ FAILED ] ERROR_TEST.NE[ FAILED ] EXPECT_TEXT.EXPECT 2 FAILED TESTS