2010-08-23 7 views
6

J'essaie de comprendre le fonctionnement des appareils de test Google.Appareils de test Google

Dire que j'ai le code suivant:

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); 

} 

Quand je compile, pourquoi faut-il dire "myPhrase1" et "myPhrase2" ne sont pas déclarés dans le TEST_F?

+2

Une autre question: pourquoi
vous utilisez "supprimer * myPhrase1;"?
Je pense que la méthode appropriée pour utiliser delete est "delete myPhrase1;". – Zihan

Répondre

15

myPhrase1 et myPhrase2 sont locaux à la méthode d'installation, pas le dispositif d'essai.

Qu'est-ce que vous vouliez était:

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

Merci! Cela l'a réparé! – jiake

+0

protégé, dit http://code.google.com/p/googletest/source/browse/trunk/samples/sample3_unittest.cc – Bill

+0

Ya, j'ai dû utiliser protégé. – jiake

2

myPhrase1 et myPhrase2 sont déclarées en tant que variables locales dans la fonction SetUp. Vous devez les déclarer en tant que membres de la classe:

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

Dans les deux instructions de suppression, vous devriez juste passer le pointeur, sans les déférer. – qed

Questions connexes