29

二重の数値や浮動小数点数を合計した場合にテストケースが失敗した理由がわかりません。整数データ型では非常にうまく機能します。

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

4 に答える 4

48

EXPECT_NEAR代わりにまたはDoubleEqマッチャーを使用してください。浮動小数点演算は丸め誤差につながる可能性があり、結果がわずかに異なる場合があります。

于 2013-02-28T06:06:54.237 に答える
33

浮動小数点の比較に関するドキュメントを参照してください

EXPECT_EQ完全一致を使用します。ただし、2つの浮動小数点数を正確に一致させることはできません。(少なくとも簡単に。)

EXPECT_FLOAT_EQまたはを使用できますEXPECT_DOUBLE_EQ。(ヒューリスティックな境界を使用)また、EXPECT_NEAR特定の境界を使用して使用することもできます。

于 2013-02-28T06:09:00.373 に答える
4

https://testing.googleblog.com/2008/10/tott-floating-point-comparison.htmlから

浮動小数点値を比較する場合、等しいかどうかをチェックすると、予期しない結果が生じる可能性があります。丸め誤差は、期待される結果に近い結果になる可能性がありますが、等しくはありません。その結果、プログラムが正しく実装されていても、2つの浮動小数点数が等しいかどうかをチェックするときにアサーションが失敗する可能性があります。

Google C ++テストフレームワークは、指定された精度まで2つの浮動小数点量を比較するための関数を提供します。

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));
}
于 2019-08-22T07:09:46.677 に答える
-5

これはGoogletestの単なるバグです。テキスト出力は失敗を証明するはずですが、その形式は正確に指定されていません。

于 2016-01-19T10:17:40.600 に答える