gtest教程(记录小白从0学习gtest的过程)

2023-05-16

gtest使用教程

1 简介

之前对gtest一无所知,最近,找了些相关的资料,学习了下.这里主要记录了学习过程和相关知识点.

什么是gtest: gtest测试框架是在不同平台上(Linux,Mac OS X,Windows,Cygwin,Windows CE和Symbian)为编写C++测试而生成的。它是基于xUnit架构的测试框架,支持自动发现测试,丰富的断言集,用户定义的断言.

2 准备工作

无需linux虚拟机,Windows就可以,无需安装任何专业软件,但是要求可以上网.
是的,我们将直接在网页上进行在线编码,编译,运行.还不知道如何在线编译调试代码的,见上一篇文章

3 获取gtest源码

https://github.com/google/googletest.git

我是用git小乌龟下载的.
在这里插入图片描述
也可以用其他方式,目的就是获取源码:
在这里插入图片描述

4 创建工程

进入https://replit.com/
创建一个c++空白工程.
(如果你有linux环境或者虚拟机,将文件拷贝到linux就好了)
在这里插入图片描述
我的工程名叫test.
然后导入源码.
在这里插入图片描述
选择本地的gtest源码目录.
成功后:
在这里插入图片描述

5 编译gtest

  • 1 进入googletest,创建build文件夹(实际拼写出了点问题)
    在这里插入图片描述
    在shell下:
cd  googletest/bulid/
cmake ..
make

在这里插入图片描述
成功后得到静态库文件:
在这里插入图片描述

将libgtest.a  libgtest_main.a拷贝到main.cpp同级目录下(main.cpp自己创建)
cp googletest/bulid/lib/libgtest*.a .

6 测试

先搞个例子跑起来.
main.cpp

/* main.cpp
 * Created by 一条晓鱼 on 2022/12/15.
 */
#include "gtest/gtest.h"
#include <iostream>
#include <string>

int add(int a, int b)
{
	return a + b;
}

TEST(fun, add_a)
{
	EXPECT_EQ(-3, add(-2,-1));
	EXPECT_EQ(-2, add(1,-3));
}

int main(int argc, char **argv){

    ::testing::InitGoogleTest(&argc, argv);
	return RUN_ALL_TESTS();

	return 0;
}
g++ main.cpp  libgtest.a -lpthread -std=c++14 -I /home/runner/test/googletest/googletest/include -o m
./m
(由于gtest版本问题,12.x  必须c++14以上才能编译通过,刚开始编译用的11标准,一直报错)
(有用的就是静态库和头文件,将来移植的时候就是需要这两个东西)

在这里插入图片描述
这样就算可以用啦.后面具体讲一下,gtest怎么用.

7 gtest 怎么用

  • 断言
    分ASSERT_XXX 和 EXPECT_XXX两类.
    区别:
    如果ASSERT_XXX 测试结果不通过,后面的测试就不会执行了.
    如果EXPECT_XXX 测试结果不通过,后面的测试会接着执行.
    布尔断言:单参断言
    ASSERT_TRUE、ASSERT_FALSE、EXPECT_TRUE、EXPECT_FALSE
    数值断言:双参
    ASSERT_EQ、ASSERT_NE、ASSERT_LT、ASSERT_LE、ASSERT_GT、ASSERT_GE
    EXPECT_EQ、EXPECT_NE、EXPECT_LT、EXPECT_LE、EXPECT_GT、EXPECT_GE
    字符串断言
    ASSERT_STREQ、ASSERT_STRCASEEQ

  • TEST(test_suite_name,test_name)
    一个TEST()算是一个测试case.
    TEST(x,y)展开为x_y_TEST()这样的函数
    比如测试add()函数,我们可以考虑多种测试情况:和为负数,和为正数,极限值测试.

/*
 * Created by 一条晓鱼 on 2022/12/15.
 */
#include "gtest/gtest.h"
#include <iostream>
#include <string>

int add(int a, int b)
{
	return a + b;
}

TEST(add, negative)
{
	EXPECT_EQ(-3, add(-2,-1));
	EXPECT_EQ(-2, add(1,-3));
}

TEST(add, positive)
{
	EXPECT_EQ(1, add(2,-1));
	EXPECT_EQ(2, add(-1,3));
}

TEST(add, limit)
{
    int a = 0x7fffffff + 1;
    std::cout<<"a = "<<a<<"\n";
	EXPECT_EQ(a, add(0x7fffffff,1));
	EXPECT_EQ(0, add(0xffffffff,1));
}

int main(int argc, char **argv){

  ::testing::InitGoogleTest(&argc, argv);
	return RUN_ALL_TESTS();

	return 0;
}

在这里插入图片描述

  • TEST_F(x,y)
    以下函数使用需要定义测试套类继承::testing::Test,重新实现对应函数.
    SetUpTestSuite:static测试套级别,运行测试套第一个用例前执
    TearDownTestSuite: static 测试套级别,运行测试套最后一个用例后执行
    SetUp:virtual 测试套中每个测试用例开始时执行
    TearDown:virtrual 测试套中每个测试用例运行后执行
    x 为 class名.
    [怎么理解,举个例子:
    TEST()适用于单次api测试,但是通常我们都是以模块或者功能进行开发的,比如我们写了一个链表,链表里面有很多api:添加,删除,比较,等.对于整个链表的测试就是套件级别的,里面的api就是test级别的.
    TEST_F(list,add)
    TEST_F(list,delete)
    ]
/*
 * Created by 一条晓鱼 on 2022/12/15.
 */
#include "gtest/gtest.h"
#include <iostream>
#include <string>

int add(int a, int b)
{
	return a + b;
}

TEST(add, negative)
{
	EXPECT_EQ(-3, add(-2,-1));
	EXPECT_EQ(-2, add(1,-3));
}

TEST(add, positive)
{
	EXPECT_EQ(1, add(2,-1));
	EXPECT_EQ(2, add(-1,3));
}

TEST(add, limit)
{
  int a = 0x7fffffff + 1;
  std::cout<<"a = "<<a<<"\n";
	EXPECT_EQ(a, add(0x7fffffff,1));
	EXPECT_EQ(0, add(0xffffffff,1));
}

class FooTest : public ::testing::Test {
 protected:
  // You can remove any or all of the following functions if their bodies would
  // be empty.

  FooTest() {
     // You can do set-up work for each test here.
  }

  ~FooTest() override {
     // You can do clean-up work that doesn't throw exceptions here.
  }
  static void SetUpTestSuite() {
    std::cout<<"===================run before first case..."<<std::endl;
  } 

  static void TearDownTestSuite() {
    std::cout<<"===================run after last case..."<<std::endl;
  }
  // If the constructor and destructor are not enough for setting up
  // and cleaning up each test, you can define the following methods:

  void SetUp() override {
    std::cout<<" =========================SetUp() \n";
     // Code here will be called immediately after the constructor (right
     // before each test).
  }

  void TearDown() override {
    std::cout<<" =========================TearDown() \n";
     // Code here will be called immediately after each test (right
     // before the destructor).
  }

  // Class members declared here can be used by all tests in the test suite
  // for Foo.
};

TEST_F(FooTest,test_a)
{
  EXPECT_EQ(2, add(0x7fffffff,1));
}

TEST_F(FooTest,test_b)
{
  EXPECT_EQ(1, add(0,1));
}

int main(int argc, char **argv){

  ::testing::InitGoogleTest(&argc, argv);
	return RUN_ALL_TESTS();

	return 0;
}

在这里插入图片描述

上面两个是常用的.基本上就是初级教程里面的内容,高级教程后面有链接.

8 参考

初级教程
高级教程
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gtest教程(记录小白从0学习gtest的过程) 的相关文章

  • gtest教程(记录小白从0学习gtest的过程)

    gtest使用教程 1 简介 之前对gtest一无所知 最近 找了些相关的资料 学习了下 这里主要记录了学习过程和相关知识点 什么是gtest gtest测试框架是在不同平台上 xff08 Linux xff0c Mac OS X xff0
  • 【C++中级篇】gtest的使用方法及cmake配置

    个人箴言 xff1a 不积跬步 xff0c 无以至千里 xff1b 不积小流 xff0c 无以成江海 夯实基础 xff0c 成就高楼大厦 前言 xff1a 在一项c 43 43 工程中 xff0c 会存在很多类 xff0c 很多功能方法 x
  • 安装kalibr踩坑1:Could NOT find GTest (missing: GTEST_LIBRARY GTEST_MAIN_LIBRARY)

    Could NOT find GTest missing GTEST LIBRARY GTEST MAIN LIBRARY 因为GTest虽然安装过 xff0c 但是好像找不到头文件 sudo apt get install libgtes
  • Gtest输出单元测试报告和输出覆盖率报告

    文章目录 1 要求2 生成gtest测试报告3 生成gtest覆盖率报告 1 要求 编译工具 xff1a 选择Cmake xff0c 单元测试使用Gtest 2 生成gtest测试报告 gtest本身仅能输出xml或者json格式的测试报告
  • CLion下的gtest测试

    在mac环境中 xff0c 使用CLion编译的简单gtest程序 一 下载gtest源码 加入工程中 xff1a 二 编写CMakeList txt 文件 在文件中添加头文件和链接库文件 xff0c 并将链接库文件与目标文件进行链接 sp
  • gtest中字符串比较是否相等

    1 EXPECT EQ val1 xff0c val2 xff09 class StringCmpTest span class token punctuation span public testing span class token
  • Cmakelists配置多级目录的gtest项目(项目代码和测试代码分离)

    cmake一些语法定义 之前的博客主要写了怎么配置gtest项目 xff0c 但是一般项目代码和测试代码并不在一起 xff0c 所以尝试将代码分离 主要分成三个部分 xff0c 下面给出demo的分级目录 gtest demo CMakel
  • TDD三定律

    定律一 在编写不能通过的单元测试前 不可编写生产代码 定律二 只可编写刚好无法通过的单元测试 不能编译也算不过 定律三 只可编写刚好足以通过当前失败测试的生产代码 测试代码的要素 可读性 可读性 可读性 重要事说三遍 编写测试用例的模式 或
  • GTest基础学习-05-第5个单元测试-父test fixture和子test fixture的使用

    这篇来学习Gtest官方示例中的第5个 为什么直接跳过第4个 因为第四个是测试一个简单的计数器 看了下单元测试内容 没有新的知识点 就一个TEST 里面使用了连续3 4个EXPECT TRUE断言宏 完全没有任何新的知识点 就不再介绍第4个
  • gtest初识 - googletest(一)

    gtest是Google开发的一个开源单元测试框架 代码提供丰富的注释和实例 参考实际用例可以很快上手基本单元测试 丰富的代码注释能够让有兴趣的开发者深入了解gtest的代码结构并做部分针对性的二次开发 gtest主要针对c c 提供了针对
  • 遇见gtest--事件

    1 前言 在单元测试中 我们经常需要在某个测试套件 测试用例或者整个测试运行之前进行前置条件设置及检查 或者运行之后对运行结果进行校验等操作 在gtest中 称之为事件机制 gtest将事件按照作用的范围不同进行划分 从大到小总共分为3个层
  • GTest源码剖析(六)——RUN_ALL_TESTS

    GTest源码剖析 RUN ALL TESTS GTest源码剖析RUN ALL TESTS RUN ALL TESTS源码分析 1 UnitTestRun 2 HandleExceptionsInMethodIfSupported 3 U
  • CMake项目使用ctest+gtest进行单元测试

    随着CMake工具越来越强大便捷 越来越多的C C 项目转而使用CMake来进行编译管理 它还提供了用于测试的ctest命令来执行项目中编写的单元测试 本文就以一个实例来介绍如何使用ctest来进行单元测试 一 环境准备 本文实例环境VSC
  • 使用gtest做单元测试

    使用gtest做单元测试 文章目录 使用gtest做单元测试 1 用gtest写测试工程的大致流程 配置gtest头文件及库 gtest的相关概念 TEST与TEST F 断言 事件机制 参考 gtest是一个跨平台的 Liunx Mac
  • gtest在使用中出现错误:error: undefined reference to ‘testing::internal::EqFailure(char const*, char const*,

    如题 业务需要编写了一个C的API库 顺带写了一个gtest测试用例 但是编译的时候出现题目中的错误 折腾了半天以为是gtest的问题 结果发现是自己CMakelist txt的问题 因为Gtest支持的最低版本是Cxx 14版本 所以只要
  • Linux下使用gtest对接口进行单元测试

    目录 1 背景 2 gtest 断言 2 1 布尔值判断 2 2 二进制比较 2 3 字符串比较 2 4 浮点数比较 3 实践 3 1 框架使用 3 2 用例编写 3 3 编译运行 4 结论 1 背景 工程中涉及基础接口的设计 为了保证接口
  • Google Mock - GoogleTest(九)

    本文翻译自 https github com google googletest blob master googlemock docs CheatSheet md 一 定义一个模拟类 1 模拟一个正常的类 就是接口类 给 1 2 3 4
  • GTest源码剖析(四)——TEST_P宏

    GTest源码剖析 TEST P宏 GTest源码剖析TEST P宏 TEST P宏用法 TestWithParam 类 1 TestWithParam 类定义 2 WithParamInterface 模版类定义 INSTANTIATE
  • gtest单元测试框架介绍及简单使用

    Gtest介绍 Gtest是Google的一个开源框架 它主要用于写单元测试 检查真自己的程序是否符合预期行为 可在多个平台上使用 包括Linux Mac OS X Windows Cygwin和Symbian 它提供了丰富的断言 致命和非
  • gtest 单元测试工具的基本使用

    gtest 单元测试 gtest 简介 gtest 优点 安装 gtest 测试 demo 总结 gtest 简介 gtest是Google的一套用于编写C 测试的框架 可以运行在很多平台上 包括Linux Mac OS X Windows

随机推荐

  • c++ new运算符是如何调用构造函数的

    文章目录 内存申请和对象构造placement new答案很简单参考链接 内存申请和对象构造 本文内容简短 xff0c 只为记录下一次思考过程 xff0c 事情起源于一句话 xff0c new操作符会调用operator new分配内存再调
  • VS2015报错LNK2001 "public: virtual struct QMetaObject const...

    在VS2015中C 43 43 项目会出现报错 xff0c 我的错误是以下三个外部命令 1 LNK2001 34 public virtual struct QMetaObject const cdecl UTMUI metaObject
  • VS2015报错 无法打开python37_d.lib文件

    这个问题百度了很多次 xff0c 为了解决走了完了 xff0c 也让我更了解VS的Release和Debug VS的2015的Debug需要在属性 链接器 输入 附加依赖器里面写的是python37 d lib 而Relase里写的是pyt
  • ASM1053E ASM1153E对比

    转自https www chiphell com thread 1586025 1 1 html 市面上的SATA转USB3 0解决方案五花八门 xff0c 作为消费者有时候被厂家的宣传搞得晕头转向 xff0c 而一个核心主控好坏直接决定产
  • 普通门禁卡及各类复制卡相关知识

    转自 xff1a https nfctool cn 42 本文带你了解M1卡的数据结构 xff0c 为以后的破解提供理论基础 同时带你了解各种IC卡 xff0c 让你对破解和复制有更清晰的目标 请注意 xff0c ID卡没有密码 xff0c
  • NVIDIA Jetson TX2 更新软件源

    1 xff0c 确定系统版本 ubuntu14 04是trusty xff0c ubuntu16 04是xenial 2 xff0c 先备份原文件sources list xff0c 防止误操作后无法恢复 将原来的内容使用 符号全部注释掉
  • 查看上次安装 Archlinux 的日期

    0x00 前言 刚刚接触到 Archlinux 的时候 xff0c 大家都说这个系统容易挂 xff0c 然而用到现在我也没重装过几回 如何查看上次安装 Archlinux 是什么时候呢 xff1f 下面给出几种方法 0x01 方法 查看文件
  • Ubuntu中文字符显示问题

    文件夹名字无法显示中文 我也不知道到底怎么解决的 xff0c 大概最后是执行了以下 xff0c 就莫名其妙好了 sudo apt install ttf mscorefonts installer y sudo dpkg configure
  • 用户不在sudoers文件中的解决方法&amp;…

    在使用Linux系统过程中 xff0c 通常情况下 xff0c 我们都会使用普通用户进行日常操作 xff0c 而root用户只有在权限分配及系统设置时才会使用 xff0c 而root用户 的密码也不可能公开 普通用户执行到系统程序时 xff
  • Proxmox VE与常见的虚拟化平台比较

    1 Proxmox VE的简要介绍 Proxmox VE的简要介绍 根据Proxmox VE的官网介绍 xff0c Proxmox Virtual Environment xff08 简称Prxomox VE或PVE xff09 由位于奥地
  • Proxmox VE与常见的私有云方案比较(中)

    2 2 SmartX私有云解决方案 SmartX这家公司挺有意思的 xff0c SmartX 是番文的叫法 xff0c 这家公司好像不愿意或者是有意不让人知道他的中文名称叫啥 xff0c 不知道这是不是传说中的卑于内而媚于外 你翻遍了Sma
  • Proxmox VE 7.0的高级安装及系统盘分区-ZFS(中)

    2 2 ZFS文件系统安装方式 从Proxmox VE 3 4开始 xff0c Proxmox VE增加了ZFS文件系统作为可选的文件系统和根文件系统 Proxmox VE官方提供的ISO镜像已经集成了ZFS所需的软件包 xff0c 用户无
  • Proxmox VE逻辑卷管理LVM详解(1-4)

    Proxmox VE基于Debian Linux操作系统 xff0c 也就是说Linux操作系统的逻辑卷管理LVM在Proxmox VE也是适用的 当我们在使用Proxmox VE的时候 xff0c 如果发现某个分区的容量不够用了 xff0
  • KVM虚拟化解决方案系列之KVM部署篇(4-4)

    5 2 Ubuntu上安装虚拟机 Ubuntu上安装虚拟机的过程与CentOS上类似 xff0c 这里我也简单讲一下 第一步 xff0c 创建虚机镜像文件 使用命令 qemu img 创建一个空白的虚拟机镜像 xff0c 格式为qcow2
  • KVM虚拟化解决方案系列之KVM管理工具-绪论篇

    我们在 KVM虚拟化解决方案系列之KVM架构篇 有讲到两个重要的内容 xff0c 一个内容是 要实现一个可运行 可运维的KVM虚拟化解决方案 xff0c 需要解决两个问题 xff0c 第一个是虚拟化技术实现问题 xff0c 第二个是集群虚拟
  • KVM虚拟化解决方案系列之KVM管理工具-libvirt介绍篇

    KVM作为后起之秀 xff0c 在公有云Hytervisor市场中占主宰地位 xff0c 如一大批基于OpenStack二次开发的云厂商 而老牌的商业VMware则在私有云Hytervisor市场中占主宰地位 xff0c 仍然是各大中小企业
  • (状态压缩) 炮兵阵地(P1185)

    题意 xff1a 在一个二维方格中 xff0c 安置大炮 有平原有高山 xff0c 只有平原可以安 大炮的射程是四个方向 xff0c 距离为2格 求 xff1a 最多能安多少个大炮 方法 xff1a 对于每一行的一种状态用一个整数表示 xf
  • 隐藏UITabBarController的tabBar

    隐藏UITabBarController的tabBar的时候 xff0c 如果不做处理那么下方会多处49pix的白条或者其他颜色的条 xff0c 解决这个问题的方法如下 void setTabBarHidden BOOL hidden se
  • 在线编译多文件c++,c,python等

    在线编译 最近在找在线编译c 43 43 的网站 网上有很多 大多数都是单个文件编译运行 无法建立工程 今天 发现一个比较好的网站 可以直接拉取git的代码进行调试 支持打断点单步调试 支持一键commit等 有些功能还没有试 1 网址 h
  • gtest教程(记录小白从0学习gtest的过程)

    gtest使用教程 1 简介 之前对gtest一无所知 最近 找了些相关的资料 学习了下 这里主要记录了学习过程和相关知识点 什么是gtest gtest测试框架是在不同平台上 xff08 Linux xff0c Mac OS X xff0