2016-11-29 3 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