GoogleTest Framework 似乎不适用于 Lambda 函数(跟进)
GoogleTest Framework seems not to work with Lambda functions (follow up)
这是对我上一个问题的跟进:
该案例中提到的解决方案适用于该特定案例,即 lambda 中模板 class 的构造函数可以用括号包裹并且构建会成功。我接受了那个答案。但问题仍然存在,即 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?
所以,这似乎确实归结为 google 测试框架中的宏不适用于 lambda 函数这一事实。
ASSERT_NO_THROW([](){throw;})
中的表达式不执行异常,它只是声明一个 lambda,然后被丢弃,因为它没有分配给任何东西。
你想要 ASSERT_NO_THROW([](){throw;}())
,它会立即尝试执行 lambda。
这是对我上一个问题的跟进:
该案例中提到的解决方案适用于该特定案例,即 lambda 中模板 class 的构造函数可以用括号包裹并且构建会成功。我接受了那个答案。但问题仍然存在,即 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?
所以,这似乎确实归结为 google 测试框架中的宏不适用于 lambda 函数这一事实。
ASSERT_NO_THROW([](){throw;})
中的表达式不执行异常,它只是声明一个 lambda,然后被丢弃,因为它没有分配给任何东西。
你想要 ASSERT_NO_THROW([](){throw;}())
,它会立即尝试执行 lambda。