GoogleTest Framework似乎不适用于Lambda函数(后续)

GoogleTest Framework seems not to work with Lambda functions (follow up)

本文关键字:函数 后续 Lambda 适用于 Framework 不适用 GoogleTest      更新时间:2023-10-16

这是我最后一个问题的后续:

谷歌测试宏似乎不适用于Lambda函数

在这种情况下提到的解决方案适用于该特定情况,即 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 函数。我认为它们就像正常的功能一样,除了匿名。显然他们这样做了。以下两个问题谈到了这一点。

C++ lambda 表达式可以抛出吗?

从 lambda 表达式中抛出异常,坏习惯?

因此,它似乎确实归结为这样一个事实,即谷歌测试框架中的宏不适用于lambda函数。

ASSERT_NO_THROW([](){throw;})中的表达式不执行异常,它只是声明一个 lambda,然后将其丢弃,因为它没有分配给任何东西。

您需要ASSERT_NO_THROW([](){throw;}()),它会立即尝试执行 lambda。