C++11 模板元编程-TLP测试框架-2.setup,teardown

转载https://www.jianshu.com/p/b56d59f77d53

1.setup

Fixture内的所有测试用例,可以共享一个setup,用于执行相同的前置准备动作;

每个testcase现在是一个类,那么我们想到在fixture里面为所有testcase类提供一个共同的父类, 

#define SETUP() struct TlpTestSetup
#define TEST(name) struct UNIQUE_NAME(tlp_test_) :TlpTestSetup

FIXTURE(TestSetUpInFixture)
{
    SETUP()
    {
        using expected = __int(0);
    };

    TEST("should use variable defined in setup")
    {
        ASSERT_EQ(__int(0), expected);
    };
};

// 上述fixture可以正常编译通过,但是遗憾的是没有定义setup的
// fixture中的testcase却不能编译通过了,
// 编译期告诉我们缺少一个名为TlpTestSetup的父类

// "tlp/test/details/Asserter.h"

using TlpTestSetup = tlp::EmptyType;

// 定义Fixture的头文件中定义了一个全局的类TlpTestSetup,
它是tlp库中空类的别名(struct EmptyType {})。
如果某一个fixture中定义了自己的TlpTestSetup,
则会在该fixture命名空间中遮掩全局的TlpTestSetup,
于是该fixture中所有的testcase都将继承于自己的TlpTestSetup。
否则就会继承自全局的这个空类

2.tearDown:TEARDOWN定义一个类,每个测试用例能够继承它,然后再将自身传递给它

#define TEST(name) struct UNIQUE_NAME(tlp_test_) :
TlpTestSetup, TlpTestTearDown<UNIQUE_NAME(tlp_test_)>

#define TEARDOWN_BEGIN()                            \
template<typename TestCase>  struct TlpTestTeardown \
{                                                   \
    TlpTestTeardown()                               \
    {                                               \
        struct Teardown : TestCase                  \
        {
            // 在这里实现teardown的定义,这里可以使用TestCase的内部定义!

#define TEARDOWN_END()  }; } };


// TlpTestTeardown构造函数中Teardown类继承的TestCase是从模板参数输入的,
// 所以在Teardown中是不能直接引用TestCase中的定义的,必须加上TestCase::前缀。
#define __test_refer(...)       typename TestCase::__VA_ARGS__

// 
FIXTURE(TestWithSetUpAndTearDown)
{
    SETUP_BEGIN()
        using Expected = __int(2);
    SETUP_END()

    TEARDOWN_BEGIN()
        ASSERT_EQ(__test_refer(Result), Expected);
    TEARDOWN_END()

    TEST("test1")
    {
        using Result = __add(__int(1), __int(1));
    };

    TEST("test2")
    {
        using Result = __div(__int(4), __int(2));
    };
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值