美文网首页
C++11 模板元编程 - 测试套件

C++11 模板元编程 - 测试套件

作者: MagicBowen | 来源:发表于2016-09-16 09:33 被阅读211次

测试套件Fixture用于对对测试用例分组。一个fixture中的所有测试用例共享了相同的脚手架,包含共同使用的前置数据,辅助函数定义等等。映射到模板元编程,fixture应该是一个可以定义类型,定义元函数的独立作用域。

首先想到也用类定义来实现fixture,这样内部的testcase就相当于fixture类的内嵌类。那么我们定义可以实现fixture的辅助宏如下:


#define FIXTURE(name) class tlp_fixture_##name

这样我们就可以如下定义Fixture了:

FIXTURE(TestIntTypeAlgo)
{
    using num1 = __int(10);
    using num2 = __int(2);

    TEST("operator add on int type")
    {
        ASSERT_EQ(__add(num1, num2), __int(12));
    };

    TEST("operator sub on int type")
    {
        ASSERT_EQ(__sub(num1, num2), __int(8));
    };
};

这样看起来似乎一切OK了,而且我们用了class关键字,这样fixture类内部定义的所有东西默认都是private的,外部不可见。

遗憾的是,上述方案有个致命问题。因为标准规定类的内部不能定义模板的特化,也就是说上述fixture的实现导致fixture内部无法定义需要模式匹配的元函数。

于是我们退而求其次,用namespace来做fixture的实现:

// "tlp/test/details/Fixture.h"

#define FIXTURE(name) namespace tlp_fixture_##name

实际TLP中FIXTURE宏的实现还包含测试套件注册的代码,所以比这里的示例代码要复杂一些。无论如何现在的fixture内部就可以定义各种供测试用例使用的临时元函数了。

FIXTURE(TestMetaFunctionInFixture)
{
    template<typename T, typename U>
    using LargerType = __if(__bool(sizeof(T) > sizeof(U)), T, U);

    struct TwoBytesType { char dummy[2]; };

    TEST("int should be larger than two bytes")
    {
        ASSERT_EQ(LargerType<int, TwoBytesType>::Result, int);
    };

    TEST("char should be smaller than two bytes")
    {
        ASSERT_EQ(LargerType<char, TwoBytesType>::Result, TwoBytesType);
    };
}

测试Setup

返回 C++11模板元编程 - 目录

相关文章

  • C++11 模板元编程 - 测试套件

    测试套件Fixture用于对对测试用例分组。一个fixture中的所有测试用例共享了相同的脚手架,包含共同使用的前...

  • C++11 模板元编程 - 测试断言

    测试最重要的是要有断言。C++标准支持的编译期断言只有一个:static_assert。 static_asser...

  • C++11 模板元编程 - 测试Setup

    Fixture内的所有测试用例,可以共享一个setup,用于执行相同的前置准备动作。 针对模板元编程进行测试时,所...

  • C++11 模板元编程 - 测试Teardown

    既然fixture内部可以定义setup,我们自然希望也能对称地定义teardown,用于处理同一个fixture...

  • C++11 模板元编程 - 元编程

    从本节开始我们将模板元编程当做一门独立的函数式语言来讨论它的方方面面。 所谓元编程,就是指可以产生程序的程序。由于...

  • C++11 模板元编程 - TLP测试框架

    既然说可以把模板元编程当做一门独立的语言,那么针对这门语言,我们希望能有一个专门的xUnit测试框架。 传统的C+...

  • C++11 模板元编程 - 测试报告

    我们知道一个完整的测试框架还需要有用例过滤和用例统计汇报的功能。由于模板元编程基本没有任何IO能力,所以用例过滤和...

  • C++11 模板元编程 - 测试用例

    有了断言,我们希望把断言封装到独立的测试用例(testcase)里面。 一个测试用例一般包含特定于自己的前置条件、...

  • C++11 模板元编程 - 模板元编程的应用

    本节开始我们通过使用C++模板元编程去解决一些实际问题,来展示模板元编程针对现实问题的使用方法和设计技巧。本节中的...

  • C++11 模板元编程 - 模板递归

    模板可以被递归调用,在模板递归的过程中,可以执行前面我们提到的两种编译期计算:数值计算和类型计算。 下面我们用模板...

网友评论

      本文标题:C++11 模板元编程 - 测试套件

      本文链接:https://www.haomeiwen.com/subject/vwtiettx.html