GTest — как подготовить данные для многократного использования с помощью метода установки?

#c #unit-testing #googletest

#c #модульное тестирование #googletest

Вопрос:

Я пытаюсь запустить несколько тестов Google, и мне нужно повторить довольно много кода в каждом тестовом приборе, поэтому я хочу сделать код как можно более кратким, и я хотел бы использовать метод SetUp дочернего класса родительского класса Testing::test, но TEST_Fприборы не распознают переменные из SetUp

Это самый простой пример, который я могу придумать:

 class FooTest: public testing::Test
      {
      protected:
        virtual void SetUp() // using void SetUp() override does not help
        {
          int FooVar = 911;
        }

        virtual void TearDown()
        {
        }
      };

TEST_F(FooTest, SampleTest)
{
  // FooTest::SetUp(); // This does not help as well
  EXPECT_EQ(911, FooVar);
}
  

Когда я пытаюсь скомпилировать этот код, он показывает ошибку, что FooVar не был объявлен в этой области. Как я могу это исправить?
Большое вам спасибо за любую помощь.

Комментарии:

1. Вам нужно объявить FooVar как член класса. В настоящее время это локальная переменная внутри SetUp метода.

2. Вы объявляете FooVar in int FooVar = 911; . Как возможно, что компилятор показывает эту ошибку?

3. @M.Спасибо, я этого не осознавал. Не могли бы вы, пожалуйста, добавить ответ, чтобы я мог принять его?

Ответ №1:

FooVar является локальной переменной внутри SetUp метода. Если вы хотите использовать его в тестовых приборах, он должен быть членом класса:

 class FooTest: public testing::Test
{
      protected:

      int FooVar;
      virtual void SetUp() override
      {
        this.FooVar = 911;
      }
};
  

В этом примере, если вы устанавливаете только целочисленные типы, следует просто сделать их постоянными переменными-членами.