我如何用值模板编写doctest测试用例?

问题描述 投票:0回答:1

在doctest中,我们可以编写C ++测试框架:

TEST_SUITE("foo") {

    TEST_CASE_TEMPLATE("bar", T, t1, t2, t3) {
        /* code using template parameter T */
    }

}

并且这有效-如果t1t2t3types。它的实现方式是doctest生成代码,包括

template<typename T>
inline void DOCTEST_ANONYMOUS(_DOCTEST_ANON_TMP_)()

并在T之后为宏参数调用此函数。这显然不适用于value参数,例如TEST_CASE_TEMPLATE("bar", MyType, v1, v2, v3)

我们可以使用doctest在数字参数上创建模板吗?

c++ unit-testing doctest
1个回答
1
投票

一个丑陋的解决方案(不使用任何doctest工具)将是:

template <typename T, T Value>
struct value_as_type { static constexpr const T value { Value }; };

然后替换

TEST_CASE_TEMPLATE("bar", T, t1, t2, t3) { /*... etc ... */ }

with:

TEST_CASE_TEMPLATE("bar", MyType, 
    value_to_type<MyType, v1>,
    value_to_type<MyType, v2>,
    value_to_type<MyType, v3>)  
{
    constexpr const MyType val { MyType::value };
    /*... etc ... */
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.