Catch2 GENERATE 看起来很不错,我想在 GTest 中使用类似的东西。
我知道 GTest 中的参数化测试,但我不喜欢从测试主体和值列表中拆分出来,以及对 GetParam() 的丑陋调用。
此外,我喜欢 Catch2 中 GENERATOR 的范围、拍摄、随机功能。
对于那些不熟悉 GENERATE 的人:这是一种神奇的迭代(针对列出的每个值运行测试,而无需用户显式循环这些值)。如果它们是嵌套的,则它们充当“笛卡尔积”,即这将运行此测试 10 次(“one” 2x2 次,“two” 2x3 次)。
TEST_CASE("Generators") {
auto i = GENERATE(1, 2);
SECTION("one") {
auto j = GENERATE(-3, -2);
REQUIRE(j < i);
}
SECTION("two") {
auto k = GENERATE(4, 5, 6);
REQUIRE(j != k);
}
}
range、take、random 是生成值的助手(文档)。