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

这篇具有很好参考价值的文章主要介绍了gtest教程(记录小白从0学习gtest的过程)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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小乌龟下载的.
gtest教程(记录小白从0学习gtest的过程)
也可以用其他方式,目的就是获取源码:
gtest教程(记录小白从0学习gtest的过程)

4 创建工程

进入https://replit.com/
创建一个c++空白工程.
(如果你有linux环境或者虚拟机,将文件拷贝到linux就好了)
gtest教程(记录小白从0学习gtest的过程)
我的工程名叫test.
然后导入源码.
gtest教程(记录小白从0学习gtest的过程)
选择本地的gtest源码目录.
成功后:
gtest教程(记录小白从0学习gtest的过程)

5 编译gtest

  • 1 进入googletest,创建build文件夹(实际拼写出了点问题)
    gtest教程(记录小白从0学习gtest的过程)
    在shell下:
cd  googletest/bulid/
cmake ..
make

gtest教程(记录小白从0学习gtest的过程)
成功后得到静态库文件:
gtest教程(记录小白从0学习gtest的过程)

将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教程(记录小白从0学习gtest的过程)
这样就算可以用啦.后面具体讲一下,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;
}

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

  • 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;
}

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

后续—gtest 死亡测试怎么用

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

8 参考

初级教程
高级教程
gtest教程(记录小白从0学习gtest的过程)文章来源地址https://www.toymoban.com/news/detail-421988.html

到了这里,关于gtest教程(记录小白从0学习gtest的过程)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何使用租用的云服务器实现神经网络训练过程(超详细教程,新手小白适用)

    超级感谢up主7_xun的B站教学视频: 适合深度学习小白的CV实战——在AutoDL上租用云服务器跑YOLOv5的全过程 链接:适合深度学习小白的CV实战——在AutoDL上租用云服务器跑YOLOv5的全过程_哔哩哔哩_bilibili 在GitHub中搜索yolov,点击第一个项目,ultralytics/yolov5 点击第一个项目进入后,

    2023年04月21日
    浏览(53)
  • (小白全过程记录)Ubuntu下伪分布式Hadoop环境搭建

    目录 0.准备 1.Hadoop伪分布式环境搭建 2.安装ssh,配置ssh无密码登录 3.通过拖拽的方式将文件从windows传到linux桌面 5.安装hadoop 6.修改hadoop环境变量 7.修改配置文件 core-site.xml 8.修改配置文件hdfs-site.xml文件 9.执行NameNode的格式化 10.开启NameNode和DataNode守护进程 11.访问web页面 12.关闭

    2024年02月03日
    浏览(49)
  • 【深度学习】BasicSR训练过程记录,如何使用BasicSR训练GAN

    BasicSR支持两种灵活的使用场景,以满足用户不同的需求: 本地克隆仓库使用: 用户可以直接克隆BasicSR的本地仓库,查看完整的代码并进行修改,例如在BasicSR中训练SRGAN或StyleGAN2。安装方式包括先执行 git clone ,然后运行 python setup.py develop/install 。详细信息请参考安装指南。

    2024年01月23日
    浏览(48)
  • 纯小白新人菜鸟第一次unity VR项目与matlab联动调试过程记录超详细版本2023.3.12

    本人是个超级菜鸟,因为项目需要用到unity、matlab并且实现两者联动,才刚开始接触Unity、Matlab,以前只有一点C/C++和Java基础(好几年前学的,只会加减乘除、连dll是什么都不懂),花了好几天时间根据网上、文献里的各种教程,踩了很多无法言说的小白坑,特此把过程中遇到

    2023年04月22日
    浏览(46)
  • 【深度学习 AIGC】stable diffusion webUI 使用过程,参数设置,教程,使用方法

    如果你想使用docker快速启动这个项目,你可以按下面这么操作(显卡支持CUDA11.8)。如果你不懂docker,请参考别的教程。 模型文件即checkpoint已包含了与vae相关的参数。然而,稳定扩散官方和novelai泄露的文件都包含了额外的vae,用于改进面部或其他细节。因此,加载vae文件实

    2024年02月05日
    浏览(53)
  • Django的数据库配置、生成(创建)过程、写入数据、查看数据的学习过程记录

    在文件:\\\"E:Python_projectP_001myshop-testmyshopmyshopsettings.py\\\"中写入以下数据库的配置信息: 上面的代码比较好理解,就是对于语句: django.db.backends.mysql 作一些说明: 在Django中, \\\'django.db.backends.mysql\\\' 是一个数据库后端引擎的路径,用于指定使用MySQL作为数据库的后端。数据库后

    2024年02月12日
    浏览(56)
  • gtest学习

    目录 1.Gtest介绍 2.Gtest安装 3.Gtest编译 3.1 普通编译 3.2 交叉编译 3.3 example编译 4.使用测试 4.1 测试程序解读 4.2 测试程序编译 5. 测试实例 5.1 基本测试 5.2 测试固件 5.3 异常测试 5.4 值参数化测试         gtest是一个跨平台的(Liunx、Mac OS X、Windows、Cygwin、Windows CE and Symbian)C++单

    2024年02月06日
    浏览(28)
  • Python学习过程问题记录(二):Matplotlib中文显示问题

    环境:macOS Monterey 12.2.1、Python3.10.2、Matplotlib 3.5.1 目录 方法一:修改配置文件,全局字体修改 例外情况 方法二:rcParams设置,全局字体修改 方法三:fontproperties设置,非全局字体修改 方法四:FontProperties设置,非全局字体修改 搜索网络的解决方式,通过copy字体和修改matplo

    2023年04月20日
    浏览(43)
  • 【详细教程】关于如何使用Git&GitHub的基本操作汇总&GitHub的密钥配置 ->(个人学习记录笔记)

    点击 官网链接 后,进入Git官网,下载安装包 然后根据系统类型进行下载,一般为windows 一般选择64位的安装器版本 下载好后开始安装 点击Next 默认即可,Next 默认即可,Next Next Next Next Next Next Next Next Next Next install即可 我们在桌面随便创建一个文件夹例如code 进入code文件夹 鼠

    2024年02月06日
    浏览(57)
  • 小白学习XM文件转MP3格式教程

    最近周边有朋友,在喜马拉雅上下载的评书给他年迈的爷爷听,爷爷只会用最古老的那种砖块儿样式的MP3,在网上找了很多转换工具都无济于事。偶然一次吃饭得知此事,让我很惊诧。         废话不多说了,上干货:         首先,正常下载的喜马拉雅文件是一个.xm格式

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包