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


有了断言,我们希望把断言封装到独立的测试用例(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模板元编程 - 目录

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,367评论 19 139
  • 既然fixture内部可以定义setup,我们自然希望也能对称地定义teardown,用于处理同一个fixture...
    MagicBowen阅读 1,311评论 0 1
  • 既然说可以把模板元编程当做一门独立的语言,那么针对这门语言,我们希望能有一个专门的xUnit测试框架。 传统的C+...
    MagicBowen阅读 2,294评论 1 4
  • Fixture内的所有测试用例,可以共享一个setup,用于执行相同的前置准备动作。 针对模板元编程进行测试时,所...
    MagicBowen阅读 1,083评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,248评论 18 399

友情链接更多精彩内容