当前位置: 首页 > article >正文

[C++][第三方库][gtest]详细讲解

目录

  • 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.cc
    	g++ -o $@ $^ -std=c++17 -lgtest
    
    .PHONY:clean
    clean:
    	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.NE
    main.cc:16: Failure
    Expected 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.EXPECT
    main.cc:21: Failure
    Expected: (Add(20, 20)) < (10), actual: 40 vs 10
    Output in EXPECT_TEST, but after EXPECT_LT
    main.cc:25: Failure
    Expected 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
    


http://www.kler.cn/news/330929.html

相关文章:

  • 使用默认不可变的Rust变量会踩什么坑
  • 【10】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-泛型基础全解(泛型函数、泛型接口、泛型类)及参数、接口补充
  • IDEA里面的长截图插件
  • 移动端的每日任务,golang后端数据库应该怎么设计
  • 调试分析:[跳数度量]更改为[距离度量]后的 routing_bellmanford 算法
  • 工业控制过等保三级需要的网络安全设备及详细讲解
  • ide 使用技巧与插件推荐
  • 【网络原理】Udp报文结构,保姆级详解,建议收藏
  • 27 Vue3之unocss原子化
  • Spring Boot 3.x 集成 Feign
  • 浙大数据结构:06-图3 六度空间
  • C0010.Qt5.15.2下载及安装方法
  • 网络安全的详细学习顺序
  • SFTP 是什么?如何在 Linux 终端上访问 SFTP
  • 在Linux系统安装Nginx
  • 【AI知识点】损失函数(Loss Function)
  • 什么是 HTTP 请求的 X-Forwarded-Proto 字段
  • (作业)第三期书生·浦语大模型实战营(十一卷王场)--书生入门岛通关第1关Linux 基础知识
  • 进度条(倒计时)Linux
  • Jenkins从入门到精通,构建高效自动化流程