如何使用值模板编写文档测试用例?

How do I write a doctest test case with a value template?

本文关键字:文档 测试用例 何使用      更新时间:2023-10-16

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

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

这有效 - 如果t1t2t3类型。它的实现方式是doctest生成代码,包括

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

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

我们可以使用 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 ... */ }

跟:

TEST_CASE_TEMPLATE("bar", MyType, 
value_as_type<MyType, v1>,
value_as_type<MyType, v2>,
value_as_type<MyType, v3>)  
{
constexpr const MyType val { MyType::value };
/*... etc ... */
}