2016-11-29 13 views
0

私はアプリケーションの単体テストを書いています。私は、コンストラクタでいくつかの例外を持っているので、私はこれを書いた:私はこれを書くときGTestでC++ 11の問題

TEST(Tablier, ConstructeurParamInvalide2) 
{ 
    ASSERT_THROW(Tablier t_tablier{10, 65} , PreconditionException); 
} 

が、マクロASSERT_THROWが成立していないようで、テストが失敗しました。

TEST(Tablier, ConstructeurParamInvalide2) 
{ 
    ASSERT_THROW(Tablier t_tablier(10, 65) , PreconditionException); 
} 

マクロが正常に動作し、テストに合格した:私はこれを書いた場合、Tablier t_tablier{10; };代わり

switch (0) case 0: default: \ 
    if (::testing::internal::ConstCharPtr gtest_msg = "") { \ 
    bool gtest_caught_expected = false; \ 
    try { \ 
     if (::testing::internal::AlwaysTrue()) { Tablier t_tablier{10; }; \ 
    } \ 
    catch (65} const&) { \ 
     gtest_caught_expected = true; \ 
    } \ 
    catch (...) { \ 
     gtest_msg.value = \ 
      "Expected: " "Tablier t_tablier{10" " throws an exception of type " \ 
      "65}" ".\n Actual: it throws a different type."; \ 
     goto gtest_label_testthrow_76; \ 
    } \ 
    if (!gtest_caught_expected) { \ 
     gtest_msg.value = \ 
      "Expected: " "Tablier t_tablier{10" " throws an exception of type " \ 
      "65}" ".\n Actual: it throws nothing."; \ 
     goto gtest_label_testthrow_76; \ 
    } \ 
    } else \ 
    gtest_label_testthrow_76: \ 
     return ::testing::internal::AssertHelper(::testing::TestPartResult::kFatalFailure, "/home/eric/Programming/cpp/Puissance4/pxTestsUnitaires/tests/test_Tablier.cpp", 76, gtest_msg.value) \ 
    = ::testing::Message() 

注意:ここではマクロ展開です。私のプロジェクトとコンパイラはC++ 11用に設定されており、他の多くのテストはC++ 11の構文を使って渡されます。どのような問題が起こる可能性がありますか?

よろしく

+1

可能な重複は(http://stackoverflow.com/questions/30372148/passing-an-initialization-list-to-a-macro) – neuront

答えて

2

これは動作するはず:

ASSERT_THROW(Tablier t_tablier(10, 65) , PreconditionException); 
ASSERT_THROW(Tablier (10, 65) , PreconditionException); 

マクロ展開は10と65の間にコンマがマクロパラメータの区切りであると思うからです。かっこはコンパイラに区切り文字を通知するものです。

cpp.replace

から外部最もマッチング括弧で囲まれた前処理トークンのシーケンスは、機能のようなマクロの引数のリストを形成します。 リスト内の個々の引数はカンマの前処理トークンで区切られていますが、コンマの内側のかっこの間のトークンを前処理すると、引数が別々になりません。 [マクロに初期化リストを渡す]の

+0

マクロ文句停止しました。ありがとう! – BobMorane

+0

あなたの最後の編集はまさに私の質問で既に働いていたものです – BobMorane

関連する問題