热门标签 | 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。


推荐阅读
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
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社区 版权所有