私は以下のコードを持っています。 Interpolatorクラスの詳細が何であるかにかかわらず、この場合は例外をスローしないでください。これが私がテストしたいものです。Googleテストマクロはラムダ関数では動作しないようです
TEST(errorhandlingInterpolator, toolargeInput) {
const size_t numSamples = 100000;
std::array<double, numSamples> bf{{0.0, 0.5, 1.0, 0.0, 0.5, 0.0}};
std::array<double, numSamples> ts{{0.0, 0.0, 0.0, 0.5, 0.5, 1.0}};
std::array<double, numSamples> current{ {0.13, 0.83, 0.96, 0.22, 0.30, 0.54} };
ASSERT_NO_THROW([&](){
Interpolator<double, double, double, numSamples> intp(bf, ts, current);
});
}
残念ながら、私は残念ながら(ラムダ機能の有無にかかわらず)次のエラーが発生します。以前は同じエラーが発生した後にラムダでコンストラクタ呼び出しをラップしました。
.../test/main.cpp:34: error: macro "ASSERT_NO_THROW" passed 4 arguments, but takes just 1
});
^
これは決算上の問題ではありません。私は自分のコードをAssertionSuccess()またはAssertionFailure()を返すことができる「通常の」関数でラップすることができますが、それはアサーションでチェックすることができますが、あまりうまくありません。
CATCHテストフレームワークで私の経験から、例えば、REQUIRE_NOTHROW()を使った例外のテストが、コンストラクタから直接マクロで可能であることが分かります。ラムダでさえ不要だったでしょう。
Googleテストフレームワークを誤って使用していないのであれば、私は驚いています。
私の問題の解決策を探している次の2つのドキュメントに行きましたが、参照はありません。
https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md
https://github.com/google/googletest/blob/master/googletest/docs/Primer.md
[関連性が高い](https://stackoverflow.com/questions/35957357/getting-too-many-arguments-provided-to-function-like-macro-invocation-compile-er)、潜在的な詐欺。 Tl; dr:それを別の括弧で囲みます。 –
eeek!確かに!しかし、グーグルはその質問に出ていない! :D –
[OK]をラップされたコンストラクタはラムダで囲まれた括弧で囲まれています。 :P –