2010-08-23 16 views
6

Intento comprender cómo funcionan los accesorios de prueba de Google.Google Test Fixtures

Decir que tengo el siguiente código:

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

} 

Cuando compilo, ¿por qué dice "myPhrase1" y "myPhrase2" están no declarado en la TEST_F?

+2

Otra pregunta:
por qué está utilizando "eliminar * myPhrase1;"?
Creo que el método apropiado para usar eliminar es "eliminar myPhrase1;". – Zihan

Respuesta

15

myPhrase1 y myPhrase2 son locales al método de configuración, no el accesorio de la prueba.

Lo que quería era:

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

Gracias! ¡Eso lo solucionó! – jiake

+0

protegido, dice http://code.google.com/p/googletest/source/browse/trunk/samples/sample3_unittest.cc – Bill

+0

Ya, tuve que usar protegido. – jiake

2

myPhrase1 y myPhrase2 se declaran como variables locales en la función SetUp. Tiene que declarar como miembros de la clase:

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

En las dos instrucciones de eliminación, solo debe pasar el puntero, sin deferencia por ellos. – qed