ZhiBing's blog(码上看世界) ZhiBing's blog(码上看世界)
首页
  • Linux工具链

    • shell命令
  • 构建

    • CMake
    • Makefile
  • 版本管理

    • Git
    • Github
  • IDE及工具

    • vscode
    • CLion
  • 设计模式

    • 设计原则
  • 编程语言

    • C++
    • Go
    • Python
    • Shell
  • 调试

    • gdb
  • 开发者测试

    • gtest
  • 系统支撑

    • 操作系统
  • 性能优化

    • 编译优化选项
    • perf
    • valgrind
  • 容器

    • Docker
  • 微服务

    • Rancher
  • 其他
  • 随笔
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

ZhiBing Zheng

时间会回答成长
首页
  • Linux工具链

    • shell命令
  • 构建

    • CMake
    • Makefile
  • 版本管理

    • Git
    • Github
  • IDE及工具

    • vscode
    • CLion
  • 设计模式

    • 设计原则
  • 编程语言

    • C++
    • Go
    • Python
    • Shell
  • 调试

    • gdb
  • 开发者测试

    • gtest
  • 系统支撑

    • 操作系统
  • 性能优化

    • 编译优化选项
    • perf
    • valgrind
  • 容器

    • Docker
  • 微服务

    • Rancher
  • 其他
  • 随笔
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • 编程语言

  • 调试

  • 开发者测试

    • gtest

      • GTest Day 0 —— 编译GoogleTest
      • GTest Day 1 —— 基础使用
        • 初步使用
        • 基本的概念
        • 断言(Assertions)
          • 断言的前缀
          • 自定义错误信息的
          • 基础的断言
          • 两项比较
          • 字符串比较
      • GTest Day 2 —— 测试套件(TestSuite)的使用
      • GTest Day 3 —— 测试夹具(TestFixture)的使用
  • 系统支撑

  • 性能优化

  • 通用领域
  • 开发者测试
  • gtest
zhengzhibing
2022-06-15
目录

GTest Day 1 —— 基础使用

# GTest Day 1 —— 基础使用

GoogleTest 是 Google 的 C++ 测试和模拟框架。

# 初步使用

下载构建好 GTest 之后,我们就可以开始在自己的项目中使用 GTest 了,首先我们需要在自己的工程中包含#include"gtest/gtest.h",于此同时,我们在项目构建中需要链接 gtest 和 gtest_main 库以及头文件。pthread 库也应该包含到你的工程中,gtest 依赖于 pthread,这样我们就可以开始使用 GTest 了。

首先是初始化 GTest;

#include <iostream>
#include <gtest/gtest.h>

int main(int argc, char **argv) {
    testing::InitGoogleTest(&argc, argv);
    std::cout << "hello world" << endl;
    return RUN_ALL_TESTS();
}
1
2
3
4
5
6
7
8

testing::InitGoogleTest(&argc, argv);:初始化 GoogleTest;

执行RUN_ALL_TESTS()将会运行你定义了的测试;

# 基本的概念

当使用 GTest 的时候,你去写一些断言来测试情况是否正确,断言的会产生三种结果:success,nonfatal failure和 fatal failure,当发生了一个(fatal failure)致命错误的时候,它会终止当前的程序,其他情况下,程序仍会正常运行。

# 断言(Assertions)

GTest 的断言是像函数调用一样的宏,当断言失败了,GTest 在终端打印出断言所在源文件以及所在行数,并且会输出失败信息,你也可以提供一个自定义的错误信息,这个错误信息将在 GTest 产生的错误信息后面打印出来;

# 断言的前缀

GTest 有两种类型的断言,它们的区别在于前缀,一种是ASSERT_*。另一种是EXPECT_*;

ASSERT_前缀的断言产生的错误将是fatal failure,这个将会中断程序的执行,对于很大威胁的调试而言,使用这个类型的断言是很明智的,但是这个断言有可能导致程序申请的资源没有被释放,造成内存泄露。

EXPECT_前缀的断言产生的错误是non failure,它并不会中断程序的执行,通常情况下可使用EXPECT_*是更好一点的,它能够一次性报告多个错误;

# 自定义错误信息的

我们可以通过<<操作符将自定义的错误信息添加到宏中;

ASSERT_EQ(1, 2) << "1 and 2 are unequal";
1

对于任何能够作为输出流的内容都能够作为自定义的错误信息,对于UNICODE编码的内容将会被转化成UTF-8;

# 基础的断言

这些断言仅仅是测试条件是true/false;

Fatal assertion Nonfatal assertion Verifies
ASSERT_TRUE(condition); EXPECT_TRUE(condition); condition is true
ASSERT_FALSE(condition); EXPECT_FALSE(condition); condition is false

# 两项比较

这个是用来比较两项内容的值的断言;

Fatal assertion Nonfatal assertion Verifies
ASSERT_EQ(val1, val2); EXPECT_EQ(val1, val2); val1 == val2
ASSERT_NE(val1, val2); EXPECT_NE(val1, val2); val1 != val2
ASSERT_LT(val1, val2); EXPECT_LT(val1, val2); val1 < val2
ASSERT_LE(val1, val2); EXPECT_LE(val1, val2); val1 <= val2
ASSERT_GT(val1, val2); EXPECT_GT(val1, val2); val1 > val2
ASSERT_GE(val1, val2); EXPECT_GE(val1, val2); val1 >= val2

用于比较的两个值必须是同一种,否则会产生编译错误;

# 字符串比较

The assertions in this group compare two C strings. If you want to compare two string objects, use EXPECT_EQ, EXPECT_NE, and etc instead.

Fatal assertion Nonfatal assertio Verifies
ASSERT_STREQ(str1, str2); EXPECT_STREQ(str1, str2); the two C strings have the same content
ASSERT_STRNE(str1, str2); EXPECT_STRNE(str1, str2); the two C strings have different contents
ASSERT_STRCASEEQ(str1, str2); EXPECT_STRCASEEQ(str1, str2); the two C strings have the same content, ignoring case
ASSERT_STRCASENE(str1, str2); EXPECT_STRCASENE(str1, str2); the two C strings have different contents, ignoring case

C 风格的字符串适合使用以上断言,而对于 String 风格的字符串,ASSERT_EQ和EXPECT_EQ之类的都是可以用的。

#gtest
上次更新: 2022/06/17, 07:22:19
GTest Day 0 —— 编译GoogleTest
GTest Day 2 —— 测试套件(TestSuite)的使用

← GTest Day 0 —— 编译GoogleTest GTest Day 2 —— 测试套件(TestSuite)的使用→

最近更新
01
HPE gen10 plus 安装ESXI 7
06-12
02
ESXI 7安装黑群晖
06-12
03
ESXI 7安装win10
06-12
更多文章>
Theme by Vdoing | Copyright © 2022-2024 ZhBing Zheng | 粤ICP备2022062743号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式