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。