Вопрос про Google Test, синглтоны и инициализацию/финализацию

У меня есть пара вопросов про библиотеку модульного тестирования Google Tests.

  1. Допустим, есть глобальный объект со статической продолжительностью хранения. Например, это синглтон. Я не совсем понимаю, как отдельные тесты взаимодействуют с таким объектом. Будет ли такой синглтон разделяться между тестами точно так же, как между обыкновенными функциями? Или же тестовый фреймворк каким-то образом выдает каждому тесту свою копию глобального статического объекта?

  2. Если я хочу перед началом всех тестов выполнить глобальную инициализацию чего-то (той же сетевой подсистемы), а после завершения всех тестов - глобальную финализацию, то каким образом я должен это делать в рамках Google Tests? Если я пробую сделать эти действия до и после InitGoogleTest()/RUN_ALL_TEST(), то по какой-то причине Visual Studio перестает видеть все наборы тестов проекта.


Ответы (1 шт):

Автор решения: user7860670

Для использования некоторого предварительно изготовленного состояния в тесте следует создать fixture:

class TestFixture: public ::testing::Test
{
    public: explicit TestFixture(void)
    {
        // ...
    }

    public: ~TestFixture(void) override noexcept
    {
        // ...
    }

    protected: void SetUp(void) override // вызывается после конструктора перед тестом
    {
        // ...
    }

    protected: void TearDown(void) override // вызывается после теста перед деструктором
    {
        // ...
    }

    public: void DoSomething(void)
    {
        // ...
    }
};

А потом использовать его объявляя тесты с помощью макроса TEST_F, первым параметром которого является имя класса fixture:

TEST_F(TestFixture, MyTest)
{
    DoSomething(); // поля и методы TestFixture доступны через this
}

Важно отметить, что объект fixture для каждого теста пересоздается заново.

→ Ссылка