【发布时间】:2019-08-16 02:55:10
【问题描述】:
我有一个带有int 类型的非类型模板参数的函数,如下所示:
template <int N>
int foo() { /*...*/ }
我想针对从 0 到 32 的所有 N 值对这个函数进行单元测试。我有一个函数 int expected(int n),它采用相同的 N 值并返回预期值。实际上,我想要:
if (foo<0>() != expected(0)) { /* fail... */ }
if (foo<1>() != expected(1)) { /* fail... */ }
if (foo<2>() != expected(2)) { /* fail... */ }
// 30 more lines
我不想手动写出所有 33 个测试用例,而且我不能轻易使用运行时循环,因为 N 是编译时。
如何让编译器在 C++11 中以简单的方式为我生成测试用例,无需 BOOST_PP_REPEAT 风格的技巧或代码生成?
【问题讨论】:
-
您能否说明如果测试失败是要继续还是中止?
-
我正在使用 Catch2,测试看起来像
REQUIRE(foo<0>() == expected(0)),它使用一些 Catch2 特定的魔法中止,具体取决于命令行标志。不过,我真的不想在这里介绍 Catch2 宏的复杂性。它是否回答了您的问题@M.M?