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

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

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

有了断言,我们希望把断言封装到独立的测试用例(testcase)里面。

一个测试用例一般包含特定于自己的前置条件、action,以及对结果的断言。前置条件一般是准备好待测试用的输入数据,对于模板元编程就是定义类型。所谓action在模板元编程中一般是调用元函数,也就是实例化类模板。所以对于模板元编程,一个独立的测试用例,就是能够提供一个能在里面定义类型,实例化类模板,并且对结果类型进行断言的独立作用域。而一个类定义恰好能够满足这些要求。

我们给出一个定义testcase的辅助宏定义如下:

#define TEST(name) struct tlp_test_##name

这样我们就可以这样定义testcase了:

TEST(operator_add_on_int_type)
{
    using num1 = __int(5);
    using num2 = __int(6);
    ASSERT_EQ(__add(num1, num2), __int(11));
};

如上,一个testcase本质上得是一个合法的类定义,所以测试用例名称需要是一个合法的C++标示符,且后花括号后面需要以一个分号结束。

对于测试用例名称,我们还是希望能够是一个自由字符串,这样限制会少很多。基于此我们使用前面用过的一个小技巧,让编译器自动为类生成一个文件内不重复的类名。TEST的定义修改如下:

#define TEST(name) struct UNIQUE_NAME(tlp_test_)

这样,TEST的入参name就没有再使用,你可以让它是一个字符串,或者其它任何你喜欢的标识符。TLP库中最终定义TEST的代码比这要示例的要复杂,使用name进行测试用例的注册,所以约束了name必须是一个字符串。

现在可以如下这般自由地定义测试用例的名称了,再也不需要有讨厌的下划线了。

TEST(“operator add on int type”)
{
    using num1 = __int(10);
    using num2 = __int(2);
    ASSERT_EQ(__add(num1, num2), __int(12));
};

测试套件

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

相关文章

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

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

  • 测试用例和测试计划

    ***测试用例的******image.png ******模板介绍*** 测试用例的模板 测试用例定义: 要素:...

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

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

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

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

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

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

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

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

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

    我们继续演进前面那个无聊的类型计算的例子,来得出元函数的定义。 前面我们实现了PointerOf,它对于传进的任意...

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

    当1994年,Erwin Unruh在C++标准委员会上演示了通过C++模板在编译期计算素数的程序后,C++模板元...

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

    熟悉C++的程序员都知道,C++是一门多范式编程语言,支持面向过程、面向对象、泛型编程以及函数式编程范式。然而提到...

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

    前言 模板的基础知识模板的类型参数模板的默认参数模板的模板参数模板的特化模板的非类型参数模板的编译期计算数值计算类...

网友评论

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

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