Google Test Fixtures - PullRequest
       8

Google Test Fixtures

16 голосов
/ 23 августа 2010

Я пытаюсь понять, как работают Google Test Fixtures.

Скажем, у меня есть следующий код:

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 ]

29 голосов
/ 23 августа 2010

myPhrase1 и myPhrase2 являются локальными для метода настройки, а не для тестового прибора.

Что вы хотели:

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

}
3 голосов
/ 23 августа 2010

myPhrase1 и myPhrase2 объявлены как локальные переменные в функции SetUp.Вы должны объявить их как членов класса:

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