Вопрос про Google Test, синглтоны и инициализацию/финализацию
У меня есть пара вопросов про библиотеку модульного тестирования Google Tests.
Допустим, есть глобальный объект со статической продолжительностью хранения. Например, это синглтон. Я не совсем понимаю, как отдельные тесты взаимодействуют с таким объектом. Будет ли такой синглтон разделяться между тестами точно так же, как между обыкновенными функциями? Или же тестовый фреймворк каким-то образом выдает каждому тесту свою копию глобального статического объекта?
Если я хочу перед началом всех тестов выполнить глобальную инициализацию чего-то (той же сетевой подсистемы), а после завершения всех тестов - глобальную финализацию, то каким образом я должен это делать в рамках
Google Tests? Если я пробую сделать эти действия до и послеInitGoogleTest()/RUN_ALL_TEST(), то по какой-то причинеVisual Studioперестает видеть все наборы тестов проекта.
Ответы (1 шт):
Для использования некоторого предварительно изготовленного состояния в тесте следует создать 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 для каждого теста пересоздается заново.