热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

VeryVerySimpleC++TestingFramework

原文发表在我的另一个BLOG:VeryVerySimpleC++TestingFramework       测试驱动开发(TDD)是敏捷开发的一种方法,TDD的一个重要的工具就是

原文发表在我的另一个BLOG:Very Very Simple C++ Testing Framework

        测试驱动开发(TDD)是敏捷开发的一种方法,TDD的一个重要的工具就是单元测试(Unit Test)。如果想详细了解什么是TDD和单元测试请GOOGLE之。简单来和简略地说TDD是在测试驱动下的开发,先写完成测试然后努力使测试通过。单元测试大体包括下面所说的断言,测试固件(非常不喜欢国人这样翻译)和测试环境。

        C++单元测试框架google 的gtest是其中的不错一款,本测试框架是模仿它的。为什么不直接用它而要模仿它?因为公司不允许(允许但过程很麻烦)使用第三方的库,而公司又要求作单元测试,于是这个东西就写了出来。

        特点:

  • 小,只有一个头文件,其实你会觉得很啰嗦。
  • 使用方法和GTEST一样,当然也没那么全。
  • 跨平台
  • ……

        下载:test.h

断言(Test Assertion)

        断言包括两种,一种是以EXPECT_XXX,一种是ASSERT_XX,前者即使断言不通过,继续执行此测试用例下面的测试,后都则立即停止执行当前的测试用例。

断言宏

含义
EXPECT_EQ/ASSERT_EQ 期待数值相等
EXPECT_NEQ/ASSERT_NEQ 期待数值不相等
EXPECT_STREQ/ASSERT_STREQ 期待字符串相等
EXPECT_STRNEQ/ASSERT_STRNEQ 期待字符串不相等
EXPECT_BINEQ/ASSERT_BINEQ 期待二进制相等
EXPECT_BINNEQ/ASSERT_BINNEQ 期待二进制不相等
EXPECT_TRUE/ASSERT_TRUE 期待值为真
EXPECT_FALSE/ASSERT_FALSE 期待值为假

固件(Test Fixture)

        测试固件可看作是一组测试用例的集合,在执行这组测试用例之前或之后,可以先执行一些操作,同时也可以在执行单个测试用例之前或之后,也可以执行一些操作。对于单个测试用用例,这里,当作是包含一个测试用例的测试固件来处理。

        使用Test Fixture,你要继承Test这个类。类声明:

class Test
{
    ....
public:
    static void SetUpTestCase()
    {
    }
    static void TearDownTestCase()
    {
    }
    virtual void SetUp()
    {
    }
    virtual void TearDown()
    {
    }
    ...
};

 

        然后重写上述方法,带static的是执行所有用例之前或后执行的,不带的是每个测试用例执行之前或之后执行的。

        提供两个宏进行操作:

含义 示例
TEST_F 测试固件 TEST_F(MyTestFixture, MyCase)
{
}
MyTestFixture是你继续Test的固件。MyCase是这个用例的名称。
TEST 测试用用例 TEST(MyDummyFixture, MyCase)
{
}
MyTestFixture是固件名称,事实上它什么也不做。MyCase是这个用例的名称。

环境(Test Environment)

        测试环境是所有Test Fixture执行之前或之后进行的准备和清理。继续类Environment,其声明为:

class Environment
{
public:
    Environment(){}
    virtual ~Environment(){}
public:
    virtual void SetUp(){}
    virtual void TearDown(){}
};

          看的人应该明白。不解释。

        在初始化之前,如果使用测试环境,则要用宏SET_ENVIRONMENT将环境添加进去。

其它

       还有一些与测试无关,但是与本框架相关的一些宏。

含义
INIT_TEST 初始化框架,在使用调用
RUN_ALL_TEST 运行测试

        编译好测试程序后,可执行程序接受一些选项,和GTEST的一样。

选项 含义
--help 输出帮助信息,仅显示英文,因为哥的工作的UNIX不支持中文。
--list_tests 列出测试用例
--filter=POSTIVE_PATTERNS[-NEGATIVE_PATTERNS] 过虑,仅支持通佩符

     居然这个介绍花的时间比写这个测试框架的时间还长。Very Very Simple C++ Testing FrameworkVery Very Simple C++ Testing Framework

示例

        示例:example.cpp 更多示例参考GTEST。


推荐阅读
  • 字符串学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字 ... [详细]
  • Tornado框架中模块与静态文件的应用
    本文详细介绍了Tornado框架中模块和静态文件的使用方法。首先明确模块与模板的区别,然后通过具体的代码示例展示如何在HTML文档中使用模块,并配置模块的路由。最后,提供了模块类中参数获取的示例。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在优化Nginx与PHP的高效配置过程中,许多教程提供的配置方法存在诸多问题或不良实践。本文将深入探讨这些常见错误,并详细介绍如何正确配置Nginx和PHP,以实现更高的性能和稳定性。我们将从Nginx配置文件的基本指令入手,逐步解析每个关键参数的最优设置,帮助读者理解其背后的原理和实际应用效果。 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 本教程详细介绍了如何使用 Spring Boot 创建一个简单的 Hello World 应用程序。适合初学者快速上手。 ... [详细]
  • JComponentJLabel的setBorder前言用例2205262241前言setBorder(Border边框)实现自JComponentjava.awt.Insets ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 本文详细介绍了在Linux系统上编译安装MySQL 5.5源码的步骤。首先,通过Yum安装必要的依赖软件包,如GCC、GCC-C++等,确保编译环境的完备。接着,下载并解压MySQL 5.5的源码包,配置编译选项,进行编译和安装。最后,完成安装后,进行基本的配置和启动测试,确保MySQL服务正常运行。 ... [详细]
  • 蓝桥竞赛中的回形取数问题是一个经典的算法挑战。本文详细解析了该问题的正确实现代码,重点探讨了 `hasNext()` 和 `next()` 方法的区别与应用。尽管两者在功能上类似,都会等待用户输入下一个字符,但它们的返回值类型不同,`hasNext()` 返回一个布尔值,表示是否还有输入,而 `next()` 则直接返回下一个输入的值。通过具体的代码示例和详细的逻辑分析,本文为参赛者提供了宝贵的参考和指导。 ... [详细]
author-avatar
手机用户2602914293
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有