Google 测试宏似乎不适用于 Lambda 函数
Google Test macros seem not to work with Lambda functions
所以,我有以下代码。不管 Interpolator class 的细节是什么,在这种情况下它都不应抛出异常,而这正是我想要测试的。
TEST(errorhandlingInterpolator, toolargeInput) {
const size_t numSamples = 100000;
std::array<double, numSamples> bf{{0.0, 0.5, 1.0, 0.0, 0.5, 0.0}};
std::array<double, numSamples> ts{{0.0, 0.0, 0.0, 0.5, 0.5, 1.0}};
std::array<double, numSamples> current{ {0.13, 0.83, 0.96, 0.22, 0.30, 0.54} };
ASSERT_NO_THROW( [&](){
Interpolator<double, double, double, numSamples> intp(bf, ts, current);
});
}
不幸的是,我收到以下错误(有或没有 lambda 函数)。在之前遇到同样的错误后,我将构造函数调用包装在 lambda 中。
.../test/main.cpp:34: error: macro "ASSERT_NO_THROW" passed 4 arguments, but takes just 1
});
^
这不是破坏交易的问题。我可以将我的代码包装在一个 'normal' 函数中,然后它本身可以 return AssertionSuccess() 或 AssertionFailure(),然后可以在断言中检查它,但它似乎不是很好。
根据我使用 CATCH 测试框架的经验,我可以告诉您使用 REQUIRE_NOTHROW() 测试异常,例如,可以直接在宏中从构造函数中进行测试。即使是 lambda 也是不必要的。
如果我在使用 google 测试框架时没有犯错,我会感到很惊讶。
我查看了以下两个文档来寻找我的问题的解决方案,但似乎没有参考。
https://github.com/google/googletest/blob/master/googletest/docs/advanced.md
https://github.com/google/googletest/blob/master/googletest/docs/primer.md
当宏参数中包含逗号时会发生这种情况 - 预处理器在逗号上获取 "first dibs" 并将它们解释为参数分隔符。
解决方法是在参数周围添加一对括号。
所以,我有以下代码。不管 Interpolator class 的细节是什么,在这种情况下它都不应抛出异常,而这正是我想要测试的。
TEST(errorhandlingInterpolator, toolargeInput) {
const size_t numSamples = 100000;
std::array<double, numSamples> bf{{0.0, 0.5, 1.0, 0.0, 0.5, 0.0}};
std::array<double, numSamples> ts{{0.0, 0.0, 0.0, 0.5, 0.5, 1.0}};
std::array<double, numSamples> current{ {0.13, 0.83, 0.96, 0.22, 0.30, 0.54} };
ASSERT_NO_THROW( [&](){
Interpolator<double, double, double, numSamples> intp(bf, ts, current);
});
}
不幸的是,我收到以下错误(有或没有 lambda 函数)。在之前遇到同样的错误后,我将构造函数调用包装在 lambda 中。
.../test/main.cpp:34: error: macro "ASSERT_NO_THROW" passed 4 arguments, but takes just 1
});
^
这不是破坏交易的问题。我可以将我的代码包装在一个 'normal' 函数中,然后它本身可以 return AssertionSuccess() 或 AssertionFailure(),然后可以在断言中检查它,但它似乎不是很好。
根据我使用 CATCH 测试框架的经验,我可以告诉您使用 REQUIRE_NOTHROW() 测试异常,例如,可以直接在宏中从构造函数中进行测试。即使是 lambda 也是不必要的。
如果我在使用 google 测试框架时没有犯错,我会感到很惊讶。
我查看了以下两个文档来寻找我的问题的解决方案,但似乎没有参考。
https://github.com/google/googletest/blob/master/googletest/docs/advanced.md
https://github.com/google/googletest/blob/master/googletest/docs/primer.md
当宏参数中包含逗号时会发生这种情况 - 预处理器在逗号上获取 "first dibs" 并将它们解释为参数分隔符。
解决方法是在参数周围添加一对括号。