2013-02-28 548 views
11

我无法理解在求和双精度数或浮点数的情况下测试用例失败的原因。它对于整数数据类型工作得非常好。EXPECT_EQ为双精度或浮点数求和时出错

//在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 

回答

10

Floating Point Comparison

EXPECT_EQ查看文档使用精确匹配。 但是,您无法准确匹配两个浮动数字。 (至少轻松点)。

您可以使用EXPECT_FLOAT_EQEXPECT_DOUBLE_EQ。 (带启发式边界) 另外,您可以使用EXPECT_NEAR以及特定边界。

+0

链接导向Github项目页面。它似乎不再有效。 – 2016-05-02 20:09:23

0

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

+0

这不是gtest中的错误,而是浮点数表示中的数字属性。这里有一个参考https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – alexisrozhkov 2016-04-20 12:42:50

+0

我相信海报是说这是一个错误,文本输出没有足够的小数位来显示这两个不匹配。不是数字应该匹配。 – 2016-09-13 14:16:58

相关问题