2010-08-23 69 views
6

我在試着瞭解Google測試夾具是如何工作的。Google測試夾具

說我有下面的代碼:

class PhraseTest : public ::testing::Test 
{ 
    protected: 
    virtual void SetUp() 
    {  
     phraseClass * myPhrase1 = new createPhrase("1234567890"); 
     phraseClass * myPhrase2 = new createPhrase("1234567890"); 
    } 

    virtual void TearDown() 
    { 
     delete *myPhrase1; 
     delete *myPhrase2; 
    } 
}; 



TEST_F(PhraseTest, OperatorTest) 
{ 
    ASSERT_TRUE(*myPhrase1 == *myPhrase2); 

} 

當我編譯,爲什麼它說「myPhrase1」和「myPhrase2」是在TEST_F未申報?

+2

另一個問題:
爲什麼您正在使用 「刪除* myPhrase1;」?
我認爲使用delete的適當方法是「delete myPhrase1;」。 – Zihan 2013-10-04 15:03:22

回答

15

myPhrase1myPhrase2是本地的設置方法,而不是測試夾具。

你想要的是什麼:

class PhraseTest : public ::testing::Test 
{ 
protected: 
    phraseClass * myPhrase1; 
    phraseClass * myPhrase2; 
    virtual void SetUp() 
    {  
     myPhrase1 = new createPhrase("1234567890"); 
     myPhrase2 = new createPhrase("1234567890"); 
    } 

    virtual void TearDown() 
    { 
     delete myPhrase1; 
     delete myPhrase2; 
    } 
}; 

TEST_F(PhraseTest, OperatorTest) 
{ 
    ASSERT_TRUE(*myPhrase1 == *myPhrase2); 

} 
+0

謝謝!這解決了它! – jiake 2010-08-23 16:39:35

+0

保護,說http://code.google.com/p/googletest/source/browse/trunk/samples/sample3_unittest.cc – Bill 2010-08-23 16:40:45

+0

雅,我不得不使用保護。 – jiake 2010-08-23 16:44:06

2

myPhrase1myPhrase2SetUp函數中聲明爲局部變量。你需要把他們定義爲類的成員:

class PhraseTest : public ::testing::Test 
{ 
    protected: 

    virtual void SetUp() 
    {  
    myPhrase1 = new createPhrase("1234567890"); 
    myPhrase2 = new createPhrase("1234567890"); 
    } 

    virtual void TearDown() 
    { 
    delete *myPhrase1; 
    delete *myPhrase2; 
    } 

    phraseClass* myPhrase1; 
    phraseClass* myPhrase2; 
}; 

TEST_F(PhraseTest, OperatorTest) 
{ 
    ASSERT_TRUE(*myPhrase1 == *myPhrase2); 
} 
+2

在兩個刪除語句中,您應該只傳遞指針,而不要考慮它們。 – qed 2014-03-06 16:18:30