宣言:

class ClassOne
{
    ClassOne (ClassTwo* classTwo, ClassThree const& classThree);
}

测试:
ClassTwo* classTwo;
ClassThree classThree;
EXPECT_NO_THROW (ClassOne (classTwo, classThree));

编译并运行,但是现在我将其更改为:

宣言:
class ClassOne
{
    ClassOne (ClassThree const& classThree);
}

测试:
ClassThree classThree;
EXPECT_NO_THROW (ClassOne (classThree));

由于“没有合适的默认构造函数可用”而失败。

以下行进行编译:
ClassOne classOne (classTwo, classThree);    // First case
ClassOne classOne (classThree);    // Second case

我为什么不能在具有一个参数的构造函数上使用EXPECT_NO_THROW

最佳答案

我认为这是gtest中的错误(尽管我不是宏专家)。 EXPECT_NO_THROW最终扩展为:

#define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \
  if (::testing::internal::AlwaysTrue()) { statement; }

如果将statement括在if主体的括号中,则使用VS2012RC编译代码:
#define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \
  if (::testing::internal::AlwaysTrue()) { (statement); }
//                                         ^         ^

解决方法是,您可以执行以下操作:
EXPECT_NO_THROW ((ClassOne (classThree)));

09-06 20:43