我无法理解为什么测试用例在对双精度数或浮点数求和时失败了。它对整数数据类型工作得非常好。
//simple_method.h中的方法
double sum ( double a, double b)
{
double res = a+b;
return res;
}
//该方法的测试用例
TEST(simpleSum, sumOfFloat)
{
EXPECT_EQ(4.56, sum(0.56, 4.0));
}
//输出为
Running main() from gtest_main.cc
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from simpleSum
[ RUN ] simpleSum.sumOfFloat
/home/pcadmin/Desktop/so/so3/simple_method_test.cpp:7: Failure
Value of: sum(0.56, 4.0)
Actual: 4.56
Expected: 4.56
[ FAILED ] simpleSum.sumOfFloat (0 ms)
[----------] 1 test from simpleSum (0 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[ PASSED ] 0 tests.
[ FAILED ] 1 test, listed below:
[ FAILED ] simpleSum.sumOfFloat
1 FAILED TEST
4条答案
按热度按时间zujrkrfu1#
使用
EXPECT_NEAR
或DoubleEq
匹配器,浮点运算可能导致rounding errors,这会使结果稍有不同。u7up0aaq2#
请参阅浮点比较文档
EXPECT_EQ
使用精确匹配。但是你不能精确匹配两个浮点数。(至少很容易。)您可以使用
EXPECT_FLOAT_EQ
或EXPECT_DOUBLE_EQ
。(具有启发式边界)此外,您可以使用具有特定边界的EXPECT_NEAR
。2eafrhcq3#
从https://testing.googleblog.com/2008/10/tott-floating-point-comparison.html开始
比较浮点值时,检查是否相等可能会导致意外结果。舍入错误可能会导致结果接近预期结果,但不相等。因此,即使程序正确实现,在检查两个浮点量是否相等时,Assert也可能失败。
Google C++测试框架提供了在给定精度下比较两个浮点数的函数。
就你而言,
kulphzqa4#
这只是Googletest中的一个bug。文本输出应该证明失败,但没有精确指定格式。