C++11 issue with GTest

C++11 issue with GTest

本文关键字:GTest with issue C++11      更新时间:2023-10-16

我正在为应用程序编写单元测试。我在构造函数上有一些例外,所以我写了这篇文章:

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

当我编写这篇文章时,似乎不满足Macro Assert_throw,并且测试失败。这是宏扩展:

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()

请注意Tablier t_tablier{10; };,如果我写这篇文章:

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

宏效果很好,测试通过。我的项目和编译器配置为C 11,许多其他测试使用C 11语法通过。知道什么可能是什么?

这应该有效:

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

由于宏扩展认为10到65之间的逗号是宏参数定界符。括号在那里告诉编译器哪一个是定界符。

来自cpp.replace

由最外部匹配括号界定的预处理令牌的顺序构成了函数样宏的参数列表。列表中的单个参数通过逗号预处理令牌进行分开,但是逗号预处理令牌之间的匹配内括号之间的代币不会分开参数