【问题标题】:C++11 issue with GTestGTest 的 C++11 问题
【发布时间】:2016-11-29 23:12:47
【问题描述】:

我正在为应用程序编写单元测试。我在构造函数中有一些异常,所以我写了这个:

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

当我写这篇文章时,似乎宏 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 语法通过。知道可能是什么问题吗?

【问题讨论】:

标签: c++ c++11 googletest


【解决方案1】:

这应该可行:

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

由于宏扩展认为 10 到 65 之间的逗号是宏参数分隔符。括号是用来告诉编译器哪一个是分隔符。

来自cpp.replace

由最外面的匹配括号界定的预处理标记序列形成了类函数宏的参数列表。 列表中的各个参数由逗号预处理标记分​​隔,但匹配的内括号之间的逗号预处理标记不分隔参数

【讨论】:

  • 宏停止抱怨。谢谢!
  • 顺便说一句,您最后的编辑正是我的问题中显示的内容......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
  • 2016-06-03
相关资源
最近更新 更多