(10) GTest c++单元测试(mac版)

文章目录

概要

官方文档
https://google.github.io/googletest/

安装

bash 复制代码
 git clone https://github.com/google/googletest
 cd googletest
 mkdir build && cd build
 cmake ..
 make
 make install

实现机制-断言(简单、独立的测试)

Gtest提供了一系列丰富的断言宏,用于验证测试结果。断言宏可以分为两类:ASSERT系列 EXPECT系列

  • 如果ASSERT_XXX 测试不通过,后面的测试不会执行,测试直接终止
  • 如果EXPECT_XXX 测试结果不通过,后面的测试会继续执行

_XXX后缀代表具体的检查类型

cpp 复制代码
#include <iostream>
#include <gtest/gtest.h>
 
int add(int a, int b) {
    return a + b;
}
 
int sub(int a, int b) {
    return a - b;
}
 
// case1
TEST(testdemo1, c1) {
    EXPECT_EQ(3, add(1, 2));
    EXPECT_EQ(12, add(2, 6));
}
 
// case2
TEST(testdemo2, c2) {
    EXPECT_EQ(-1, sub(1, 2));
}
 
GTEST_API_ int main(int argc, char ** argv) {
    testing::InitGoogleTest(&argc, argv);
    EXPECT_EQ(3, add(1, 2));
    return RUN_ALL_TESTS();
}

运行结果:

实现机制-测试套件

为了方便的管理和组织多个测试用例,Gtest框架可以将测试用例组织称测试套件(Test Suite),并且可以嵌套多个。

Gtest将测试程序分为三个层级:

  • test plan:对应一个单独的可执行程序,又一个入口main函数
  • Test Suite:测试用例的集合
  • Test Case:一个单独的测试函数或测试用例,是测试的最小单位
cpp 复制代码
// case1
// test 为Test Suite的名称为test case的名称
TEST(test, c1) {
    EXPECT_EQ(3, add(1, 2));
    EXPECT_EQ(12, add(2, 6));
}

实现机制-Test Fixture和事件

我们希望在测试之间共享数据、对象,避免重复的设置和清理,做好代码测试的复用。Gtest提供了Test Fixture,能在测试前后统一做一些准备或清理操作。这些操作称为测试事件。

详细可以看 test fixture

相关推荐
东风吹柳29 分钟前
观察者模式(sigslot in C++)
c++·观察者模式·信号槽·sigslot
A懿轩A37 分钟前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
大胆飞猪2 小时前
C++9--前置++和后置++重载,const,日期类的实现(对前几篇知识点的应用)
c++
1 9 J2 小时前
数据结构 C/C++(实验五:图)
c语言·数据结构·c++·学习·算法
夕泠爱吃糖2 小时前
C++中如何实现序列化和反序列化?
服务器·数据库·c++
长潇若雪2 小时前
《类和对象:基础原理全解析(上篇)》
开发语言·c++·经验分享·类和对象
染指11104 小时前
50.第二阶段x86游戏实战2-lua获取本地寻路,跨地图寻路和获取当前地图id
c++·windows·lua·游戏安全·反游戏外挂·游戏逆向·luastudio
Code out the future4 小时前
【C++——临时对象,const T&】
开发语言·c++
sam-zy5 小时前
MFC用List Control 和Picture控件实现界面切换效果
c++·mfc
aaasssdddd965 小时前
C++的封装(十四):《设计模式》这本书
数据结构·c++·设计模式