谷歌测试宏似乎不是lambda函数工作(Google Test macros seem not to

2019-09-27 04:24发布

所以,我有下面的代码位。 无论什么样的内插器类的细节,就应该在这种情况下,不会抛出异常,这就是我想测试。

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函数)。 我裹在拉姆达构造函数调用得到相同的错误更早了。

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

这不是一个致命破坏的问题。 我可以总结我的代码,然后可以自动返回AssertionSuccess()或AssertionFailure(),它然后可以在断言检查“正常”的功能,但它似乎不是很好。

我可以从我与闭锁测试框架,测试与REQUIRE_NOTHROW()例如一个例外,从构造函数有可能在宏观马上经验告诉。 即使是拉姆达会一直不必要的。

如果我没有在使用谷歌测试框架犯了一个错误,我会感到惊讶。

我去了以下两个文档寻找我的问题的解决方案,但没有转诊似乎它。

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

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

Answer 1:

这发生在宏参数中有逗号 - 预处理器得到的逗号“了拨款”,并解释它们作为参数分隔符。

的解决方案是增加一对括号的周围参数。



文章来源: Google Test macros seem not to work with Lambda functions