gpt4 book ai didi

c++ - GoogleTest Framework 似乎不适用于 Lambda 函数(跟进)

转载 作者:太空狗 更新时间:2023-10-29 21:13:22 25 4
gpt4 key购买 nike

这是对我上一个问题的跟进:

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 函数这一事实。

最佳答案

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

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

关于c++ - GoogleTest Framework 似乎不适用于 Lambda 函数(跟进),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44497158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com