GoogleTest Framework似乎不适用于Lambda函数(后续)
GoogleTest Framework seems not to work with Lambda functions (follow up)
这是我最后一个问题的后续:
谷歌测试宏似乎不适用于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。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- GoogleTest Framework似乎不适用于Lambda函数(后续)
- 用于后续函数调用的相同内存地址
- 后续:执行类的成员函数