二重の数値または浮動小数点数を合計した場合にテストケースが失敗した理由を理解できません。整数データ型に対して非常にうまく機能します。
// 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
使用する - EXPECT_NEAR
または DoubleEq
代わりにマッチャー。浮動小数点演算は 丸め誤差 につながる可能性があり、結果がわずかに異なる場合があります。
浮動小数点比較 のドキュメントを参照してください
EXPECT_EQ
は完全一致を使用します。ただし、2つの浮動小数点数を正確に一致させることはできません。 (少なくとも簡単に。)
EXPECT_FLOAT_EQ
またはEXPECT_DOUBLE_EQ
を使用できます。 (ヒューリスティック境界を使用)また、特定の境界でEXPECT_NEAR
を使用できます。
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));
}
これはGoogletestの単なるバグです。テキスト出力は失敗を証明するはずですが、その形式は正確に指定されていません。