EXPECT_EQ与double或float之和的错误

时间:2013-02-28 05:59:16

标签: c++ unit-testing floating-point googletest

我无法理解为什么测试用例在汇总双数或浮点数时失败了。它对整数数据类型非常精细。

// 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 个答案:

答案 0 :(得分:20)

使用EXPECT_NEARDoubleEq匹配器。浮点运算可以导致rounding errors,这会使结果略有不同。

答案 1 :(得分:20)

请参阅Floating Point Comparison

的文档

EXPECT_EQ使用完全匹配。 但是你无法准确匹配两个浮点数。 (至少很轻松。)

您可以使用EXPECT_FLOAT_EQEXPECT_DOUBLE_EQ。 (带启发式边界) 此外,您可以使用EXPECT_NEAR具有特定范围。

答案 2 :(得分:1)

来自https://testing.googleblog.com/2008/10/tott-floating-point-comparison.html

  

比较浮点值时,检查相等性可能会导致   出乎意料的结果。舍入错误可能会导致以下结果:   接近预期值,但不相等。结果,   检查两个浮点的相等性时断言可能会失败   数量,即使程序执行正确也是如此。

     

Google C ++   测试框架提供用于比较两个浮点的函数   达到给定精度的数量。

ASSERT_FLOAT_EQ(expected, actual);
ASSERT_DOUBLE_EQ(expected, actual);

EXPECT_FLOAT_EQ(expected, actual);
EXPECT_DOUBLE_EQ(expected, actual);

就您而言,

TEST(simpleSum, sumOfFloat)
{
    EXPECT_DOUBLE_EQ(4.56, sum(0.56, 4.0));
}

答案 3 :(得分:-1)

这只是Googletest中的一个错误。文本输出应该证明失败,但没有精确指定它的格式。