美文网首页
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 模板元编程 - 测试用例

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