首页 文章

Google Test宏似乎不适用于Lambda函数

提问于
浏览
1

所以,我有以下一点代码 . 无论Interpolator类的细节是什么,在这种情况下都应该抛出异常,这就是我想要测试的 .

TEST(errorhandlingInterpolator, toolargeInput) {

    const size_t numSamples = 100000;

    std::array<double, numSamples> bf{{0.0, 0.5, 1.0, 0.0, 0.5, 0.0}};
    std::array<double, numSamples> ts{{0.0, 0.0, 0.0, 0.5, 0.5, 1.0}};
    std::array<double, numSamples> current{ {0.13, 0.83, 0.96, 0.22, 0.30, 0.54} };

    ASSERT_NO_THROW( [&](){
        Interpolator<double, double, double, numSamples> intp(bf, ts, current);
    });

}

不幸的是,我收到以下错误(有或没有lambda函数) . 之前得到相同的错误后,我在lambda中包装了构造函数调用 .

.../test/main.cpp:34: error: macro "ASSERT_NO_THROW" passed 4 arguments, but takes just 1
 });
  ^

这不是一个破坏性的问题 . 我可以将我的代码包装在一个'普通'函数中,该函数本身可以返回AssertionSuccess()或AssertionFailure(),然后可以在断言中检查,但它似乎不太好 .

我可以从我对CATCH测试框架的经验中看出,使用REQUIRE_NOTHROW()例如从构造函数中测试异常可以直接在宏中进行 . 即使是lambda也没必要 .

如果我在使用谷歌测试框架时没有犯错,我会感到惊讶 .

我查看了以下两个文档,寻找我的问题的解决方案,但似乎没有推荐它 .

https://github.com/google/googletest/blob/master/googletest/docs/advanced.md

https://github.com/google/googletest/blob/master/googletest/docs/primer.md

1 回答

  • 3

    当宏参数中有逗号时会发生这种情况 - 预处理器在逗号上获得“first dibs”并将它们解释为参数分隔符 .

    解决方案是在参数周围添加一对括号 .

相关问题