2012-06-06 112 views
4

聲明:googletest EXPECT_NO_THROW內沒有可用的適當的默認構造函數

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上一個參數的構造函數?

回答

4

這是gtest中的一個錯誤,我認爲(儘管我不是宏中的專家)。 EXPECT_NO_THROW最終擴展爲:

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

你的代碼編譯使用VS2012RC如果statement被包裹在括號中if體:

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

作爲一種變通方法,你可以這樣做:

EXPECT_NO_THROW ((ClassOne (classThree))); 
+0

謝謝你 - 這確實有效。我已經發現:「EXPECT_NO_THROW(new ClassOne(classThree));」工作。 – Mary

相關問題