2016-09-01 29 views
1

googletestのアサーションマクロは、エラーが発生したときに素敵なメッセージを提供するので、かなり優れています。 "後者に対して与えられた精度より小さいか、または近くにある" したがって、Advanced Guide on githubによれば、浮動小数点がどれくらい近いかについての最大絶対誤差を与えない限り、これは少なくとも可能です。 : GTest浮動小数点以下では、絶対誤差で閉じる

EXPECT_NEAR(val1, val2, abs_error); 

は、だから私は、組み合わせがあまりにも、働かなければならないと思った:彼らはどのように動作するか、「指定されたエラーとの緊密な」と言うだけで、右の上

EXPECT_PRED_FORMAT2(::testing::FloatLE, val1, val2); 

。ソースコードを見ると、どのようにEXPECT_NEARは、私は再び別の値を受け入れる

EXPECT_PRED_FORMAT3 

のような高次のマクロがあることがわかり拡大します。しかし、私はこの組み合わせをまっすぐに働かせることはできませんでした。

質問があります:これはまったく可能ですか?

もちろん、比較をコーディングしてブール値を比較するだけで回避策を実行できます。しかし、これは失敗の場合には素晴らしいgtest出力を欠いています。

+0

単純な順序で、同じ数字に2つの期待値を順番に使用するのはなぜですか? – PiotrNycz

+0

これを行うと、それらのうちの1つが常に偽であり、テストが失敗することが保証されます。これは役に立たなくなります。 Imhoには、一般的にgtestを使って "どちらかと言うか"と言うことはありません。私が間違っていると、私はそれについて学ぶことができてうれしいです:-) – Alex

答えて

1

あなたはEXPECT_PRED3(pred, val1, val2, val3)を使用することができますが、3つの引数を取り、trueまたはfalseを返す独自のPRED機能を記述する必要があります。

GoogleテストのドキュメントUsing a Function That Returns an AssertionResultに記載されているように、素晴らしいメッセージが必要な場合は、3つの引数をとり、::testing::AssertionResultを返す独自の関数を作成する必要があります。その機能をEXPECT_TRUEで使用することができます。

+0

いいですね、私はそれを見ていきます。ありがとう! – Alex

+0

だから私は関数を書いた AssertionResult FloatSmallerOrNear(float a、float b、float absErr) これはEXPECT_TRUEで動作します。しかし、私は次のことも可能であるべきだと考えましたが、それはコンパイルされません(引数が多すぎる、予想3)。 EXPECT_PRED_FORMAT3(FloatSmallerOrNear、a、b、0.1) 理由を理解していますか?どうやら私はこの時点でドキュメントを誤解しています。 – Alex

+1

'EXPECT_PRED_FORMAT3'ではなく' EXPECT_PRED3'を使うべきです。また、 'EXPECT_PRED3'を使用するとき、_pred_関数はAssertionResultではなくブール値を返さなければなりません。 – rveerd

関連する問題