【发布时间】:2017-06-12 10:25:34
【问题描述】:
这是我上一个问题的后续:
Google Test macros seem not to work with Lambda functions
该案例中提到的解决方案适用于该特定案例,即 lambda 内的模板类的构造函数可以用括号括起来,并且构建会成功。我接受了这个答案。但问题仍然存在,GoogleTest 框架似乎不适用于 Lambda 函数。我在文档中对此一无所知。
我做了以下测试,
TEST(errorhandlingInterpolator, NOTtoolargeInput) {
ASSERT_NO_THROW(throw);
}
这会导致测试失败。很好。
然后,我做到了,
TEST(errorhandlingInterpolator, NOTtoolargeInput) {
ASSERT_NO_THROW([](){throw;});
}
这将导致测试不失败。奇怪的。
所以,最后为了彻底了解(一些如此琐碎的事情),我测试了以下一点。
void dummy() { throw; }
TEST(errorhandlingInterpolator, NOTtoolargeInput) {
ASSERT_NO_THROW(throw);
}
异常导致测试失败。都很好。
这在我的脑海中引发了一个标志,异常甚至可以与 lambda 函数一起使用。我认为它们就像普通函数一样,除了匿名。显然他们这样做了。下面的两个问题就是讲这个的。
Can C++ lambda-expression throw?
throw an exception from a lambda expression, bad habit?
所以,这似乎归结为谷歌测试框架中的宏不适用于 lambda 函数。
【问题讨论】:
标签: c++ c++11 exception lambda googletest