宣言:
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)));