目录
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(参数):期待结果是
trueASSERT_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