*以下内容为本人的学习笔记,如需求转载,请声明原文链接 微信大众号「ENG八戒」mp.weixin.qq.com/s/BS_u9A4EY…

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) 的行为是否正确。

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

C++ 测试框架 GoogleTest 初学者入门篇 甲

能够看到,上面总共有一个测验套件和一个测验。首要启动一次大局测验环境,运用结构供给的宏 TEST() 创建了一个测验套件,命名为 SquareTest,和一个测验,命名为 PositiveNos。然后,运转测验套件内包含的所有测验,测验经过 OK。悉数测验完毕后,卸载大局测验环境。汇总悉数测验结果 PASSED。测验流程完毕。


因为篇幅受限,本系列教程还未结束,下一篇《C++ 测验结构 GoogleTest 初学者入门篇 乙》将在本大众号稍后推送,假如你想看了解更多精彩内容,欢迎重视我的微信大众号 ENG八戒

学习能够等,时间不等人!

重视我,带你学习编程范畴更多核心技术!

C++ 测试框架 GoogleTest 初学者入门篇 甲