C++ 测试框架GoogleTest入门介绍

目录
  • 引言
  • 简单介绍
  • 初体验

引言

开发者虽然主要负责工程里的开发任务,但是每个开发完毕的功能都是需要开发者自测通过的,所以经常会听到开发者提起单元测试的话题。那么今天我就带大伙一起来看看大名鼎鼎的谷歌 C++ 测试框架 GoogleTest.

简单介绍

来看看谷歌官方是怎么介绍这个框架的:

Googletest 是由测试技术团队根据 Google 的特定要求和约束开发的测试框架。无论您是在 Linux,Windows 还是 Mac 上工作,如果您编写 C++ 代码,googletest 都可以为您提供帮助。它支持任何类型的测试,而不仅仅是单元测试。

虽然谷歌是根据特定的需求和限制条件来开发这个框架的,但是它自己也指明了这个框架还可以用于其它用途,比如作为模拟器使用,当然这就扯远了,暂且不提。

谷歌在开发这套框架的时候,是有一套基本的设计思路的。

他们认为测试应该是相互独立而且是可重复的。如果正在做的测试由于其他测试的成功或失败而受到影响,这无疑会令人感到痛苦。GoogleTest 通过在不同的对象上运行不同的测试来实现测试的相互隔离。当其中一个或多个测试失败时,测试框架还允许测试者继续单独运行测试用例以达到快速调试。测试应该组织良好,并反映测试代码的结构。有很多测试其实可以共享数据和子例程的,那么 Googletest 提供了测试套件的概念将相关测试分组,测试套件中的所有测试就可以共享数据和子例程了。这种模式其实很常见,并且使得测试易于维护,特别是当你需要切换到新的代码工程时,测试流程将极大简化。

像谷歌这种规模的科技企业,内部的 C++ 项目非常之多,还是跨平台的,那么就对测试框架有平台无关的要求了。GoogleTest 正是如此,无论你是用的是那款编译器,哪个平台,通吃。

当然,测试的过程中理应提供尽可能全面的信息帮助开发者理解执行软件过程,GoogleTest 也不例外。就算测试过程中,某个测试执行失败被停止了,测试框架也会继续其它测试。如果你不希望某个测试由于失败而停止,可以设置该测试为非致命报错(non-fatal)。像这样的测试过程,可以帮助开发者在单个运行-编辑-编译周期中找到尽可能多的问题 bug。这样的测试框架是不是很高效?

虽说问题 bug 出现就够令开发者讨厌的了,但是自测过程的繁琐事那就更糟心了(头发怎么掉得那么快),比如,开发者除了需要测试具体内容还得自己跟踪测试清单。Googletest 就可以帮助你从这里边脱身出来,做一枚潇洒的码农。

这里问一句,你用过 JUnit 或 PyUnit 吗?如果有的话,那么 Googletest 对你来说真的是易如反掌了。据说 Googletest 是基于 xUnit 架构开发而来。至于什么是 xUnit 架构,有机会我再聊聊吧。

测试框架在测试过程中,基本的测试操作就是使用断言(assert)来验证测试代码的行为,崩溃或者断言失败都表示被测试代码的行为不正确,否则正确。

初体验

来看一下简单的测试样例(环境配置安装会在后面有详细介绍)

#include <math.h>
#include <gtest/gtest.h>
int square(const int a)
{
    int b = a * a;
    if (b != b) {
        return -1;
    } else {
        return a * a;
    }
}
TEST(SquareTest, PositiveNos) {
    ASSERT_EQ(0, square(0));
    ASSERT_EQ(36, square(6));
    ASSERT_EQ(324, square(18));
}
int main(int argc, char **argv)
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

这个测试样例是为了测试函数 int square(const int a) 的行为是否正确。

编译生成可执行文件之后,运行起来

可以看到,上面总共有一个测试套件和一个测试。首先启动一次全局测试环境,使用框架提供的宏 TEST() 创建了一个测试套件,命名为 SquareTest,和一个测试,命名为 PositiveNos。然后,运行测试套件内包含的所有测试,测试通过 OK。全部测试结束后,卸载全局测试环境。汇总全部测试结果 PASSED。测试流程结束。

以上就是C++ 测试框架GoogleTest入门介绍的详细内容,更多关于C++ 测试框架GoogleTest的资料请关注我们其它相关文章!

(0)

相关推荐

  • C++用函数对算法性能进行测试

    目录 前言 工具 模板 说明 测试 前言 “Algorithm+Data Structures=Programs”——瑞士计算机科学家尼古拉斯·沃斯 工具 C/C++库函数中的time.h/ctime库中的clock()函数 模板 #include<iostream> #include<ctime> using namespace std; clock_t start_time = clock(); { 算 法 代 码 块 }; clock_t end_time = clock()

  • C/C++ 单元自动化测试解决方案总结

    目录 前言 一.动机 1.1 方法1:使用正则表达式 1.2 方法2:使用flex/bison 分析c/c++源码文件 1.3 方法3:利用编译已经生成的AST 来生成代码 二.效果展示 2.1 业务代码零修改, 直接使用TU生成边界用例 2.2 使用注解tu::case生成用户自定义用例 2.3 使用注解tu::mock 自动生成mock方法 三.TU实现方案 3.1 AST 是什么? 3.2 AST(Abstract syntax tree) 3.3 方案 四.TU 插件使用的简易程度对比

  • google c++程序测试框架googletest使用教程详解

    目录 什么是googletest? googletest简介 谁在使用 GoogleTest? 相关开源项目 googletest的下载与编译 cmake gui编译 在vs2019中使用googletest GTest的一些基本概念 GTest的断言 事件机制 参数化 什么是googletest? googletest简介 ​GoogleTest 是 Google 的 C++ 测试和模拟框架,可以帮助程序员测试C++程序的结果预期,GoogleTest 的代码用cmake管理,可以使用cmak

  • C++之eigen安装与测试方式

    目录 C++eigen安装与测试 1.eigen库安装 2.查看eigen的版本号 C++ eigen使用 eigen几何模块的使用方法 总结 C++eigen安装与测试 1.eigen库安装 1)方法一:源码安装(推荐) 官网下载.或git下载eigen源码 cd eigen mkdir build cd build cmake .. sudo make install #安装后,头文件安装在/usr/local/include/eigen3/ #移动头文件 sudo cp -r /usr/l

  • c++的glog与spdlog的性能对比测试分析

    目录 问题: 测试内容: 测试环境: glog测试代码如下: spdlog异步测试代码: 普通io流写入测试代码: 总结: 问题: 之前看到有的博文说glog性能很好,效率很高,当时第一反应是“这个结论是几几年的?”,可惜博文都是各种抄袭和转载,不容易找到结论出处,我一直很怀疑它的写入吞吐性能. 之前作为学习优秀的代码案例,略看过glog的源代码.它是线程同步的方式记录和写入,每次调用日志的地方都要创建和释放日志器,确实在每次创建对象时并没有创建额外缓存空间,而是复用第一次创建的内存空间,这相比

  • C++ 测试框架GoogleTest入门介绍

    目录 引言 简单介绍 初体验 引言 开发者虽然主要负责工程里的开发任务,但是每个开发完毕的功能都是需要开发者自测通过的,所以经常会听到开发者提起单元测试的话题.那么今天我就带大伙一起来看看大名鼎鼎的谷歌 C++ 测试框架 GoogleTest. 简单介绍 来看看谷歌官方是怎么介绍这个框架的: Googletest 是由测试技术团队根据 Google 的特定要求和约束开发的测试框架.无论您是在 Linux,Windows 还是 Mac 上工作,如果您编写 C++ 代码,googletest 都可以

  • java 重试框架 sisyphus 入门介绍

    What is Sisyphus sisyphus综合了 spring-retry 和 gauva-retrying 的优势,使用起来也非常灵活. 为什么选择这个名字 我觉得重试做的事情和西西弗斯很相似. 一遍遍的重复,可能徒劳无功,但是乐此不疲. 人一定要想象西西弗斯的快乐.--加缪 其他原因 以前看了 java retry 的相关框架, 虽然觉得其中有很多不足之处.但是没有任何重复造轮子的冲动,觉得是徒劳无功的. 当然这段时间也看了 Netty 的接口设计,和 Hibernate-Valid

  • NodeJS测试框架mocha入门教程

    NodeJS里最常用的测试框架估计就是mocha了.它支持多种node的assert libs, 同时支持异步和同步的测试,同时支持多种方式导出结果,也支持直接在browser上跑Javascript代码测试. 本文示例大多源于官网示例,部分示例结合需要或自己的感想有所改动.更多介绍请看 官方网址:Mocha on Github Installation: 当你成功安装nodejs v0.10 和 npm后执行下面这条命令. # npm install -g mocha p.s. Ubuntu的

  • MySQL Test Run 测试框架详细介绍 

    目录 一.介绍 二.安装 三.测试示例 四.创建测试用例 五.mtr其他常用参数介绍 –force –record –big-test –suite=[dirname] 六.测试用例编写的规范 一.介绍 MySQL Test Run 简称MTR,是MySQL官方提供的自动化测试框架,执行脚本在发布路径的mysql-test目录下. 主要测试步骤,是通过执行一个case(*.test)中的语句(包括sql语句和其他管理语句),将case的输出记录保存在结果文件(*.result)中,或者是将语句执

  • Python测试框架pytest介绍

    目录 一.Pytest简介 二.Pytest安装 三.Pytest测试执行 四.测试类主函数 五.断言方法 六.常用命令详解 七.接口调用 一.Pytest简介 Pytest is a mature full-featured Python testing tool that helps you write better programs.The pytest framework makes it easy to write small tests, yet scales to support

  • MyBatis入门介绍(超简单)

    MyBatis 简介 MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis.MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects

  • 深入理解bootstrap框架之入门准备

    一.bootstrap框架简介 Bootstrap是最流行的前端开发框架. 什么是框架:开发过程的半成品. bootstrap具有以下重要特性: (1)完整的CSS样式插件 (2)丰富的预定义样式表 (3)基于jQuery的插件集 (4)灵活的栅格系统 以下将简单介绍对bootstrap可能用到的知识进行梳理. 二.新手入门 笔者使用版本是3.3.x 在bootstrap中文官网可以找到以下界面 本书采用预编译的版本进行学习 三. 文件结构 生产环境使用bootstrap.min.css和boo

  • python多线程并发及测试框架案例

    这篇文章主要介绍了python多线程并发及测试框架案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.循环创建多个线程,并通过循环启动执行 import threading from datetime import * from time import sleep # 单线程执行 def test(): print('hello world') t = threading.Thread(target=test) t.start() # 多线

  • PHP测试框架PHPUnit组织测试操作示例

    本文实例讲述了PHP测试框架PHPUnit组织测试操作.分享给大家供大家参考,具体如下: 首先是目录结构 源文件夹为 src/ 测试文件夹为 tests/ User.php <?php class Errorcode { const NAME_IS_NULL = 0; } class User { public $name; public function __construct($name) { $this->name=$name; } public function Isempty() {

随机推荐