#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
inint FooVar = 911;
. Как возможно, что компилятор показывает эту ошибку?3. @M.Спасибо, я этого не осознавал. Не могли бы вы, пожалуйста, добавить ответ, чтобы я мог принять его?
Ответ №1:
FooVar
является локальной переменной внутри SetUp
метода. Если вы хотите использовать его в тестовых приборах, он должен быть членом класса:
class FooTest: public testing::Test
{
protected:
int FooVar;
virtual void SetUp() override
{
this.FooVar = 911;
}
};
В этом примере, если вы устанавливаете только целочисленные типы, следует просто сделать их постоянными переменными-членами.