Фикстуры и настройка
Используйте общую настройку тестов
«Фикстуры и настройка» — бесплатный урок C++ Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.
Общая настройка для нескольких тестов
Если нескольким тестам нужны одни и те же объекты, фикстура позволяет определить такую настройку один раз. Фикстура — это класс, производный от ::testing::Test.
Определение фикстуры
Члены фикстуры доступны в каждом использующем её тесте. SetUp() выполняется перед каждым тестом, а TearDown() — после него.
#include <gtest/gtest.h>
#include <vector>
class VectorTest : public ::testing::Test {
protected:
std::vector<int> v;
void SetUp() override { v = {1, 2, 3}; }
};Использование TEST_F
Тесты, использующие фикстуру, записываются с помощью TEST_F; первым аргументом передаётся имя класса фикстуры.
#include <gtest/gtest.h>
#include <vector>
class VectorTest : public ::testing::Test {
protected:
std::vector<int> v{1, 2, 3};
};
TEST_F(VectorTest, HasThree) {
EXPECT_EQ(v.size(), 3u);
}
TEST_F(VectorTest, FirstIsOne) {
EXPECT_EQ(v.front(), 1);
}Новый экземпляр для каждого теста
GTest создаёт новый объект фикстуры для каждого теста. Тесты никогда не используют общее изменяемое состояние, поэтому остаются независимыми, а порядок их выполнения не имеет значения.
SetUp и конструктор
Члены можно инициализировать в конструкторе или в SetUp(). Используйте SetUp(), если инициализация может выбросить исключение или если нужно безопасно вызывать виртуальные методы.
#include <gtest/gtest.h>
class Resource : public ::testing::Test {
protected:
int* data = nullptr;
void SetUp() override { data = new int(10); }
void TearDown() override { delete data; }
};
TEST_F(Resource, HasTen) {
EXPECT_EQ(*data, 10);
}TearDown для очистки
TearDown() освобождает ресурсы, полученные в SetUp(). Если используются члены с RAII, деструктор часто выполняет эту работу автоматически, и TearDown() может вообще не понадобиться.
Настройка на уровне набора
Для дорогостоящих общих ресурсов используйте статические SetUpTestSuite() и TearDownTestSuite(). Они выполняются один раз для каждого набора, а не для каждого теста.
#include <gtest/gtest.h>
class DbTest : public ::testing::Test {
protected:
static void SetUpTestSuite() { /* open shared connection */ }
static void TearDownTestSuite() { /* close it */ }
};Для каждого теста и для всего набора
Выбирайте внимательно.
SetUp/TearDown: для каждого теста, изолированно и безопасноSetUpTestSuite/TearDownTestSuite: для всего набора, совместно и быстрее, но тесты могут влиять друг на друга
Вспомогательные методы
Фикстуры могут содержать вспомогательные методы, используемые несколькими тестами, чтобы каждый тест был сосредоточен на своих проверках.
#include <gtest/gtest.h>
#include <string>
class ParserTest : public ::testing::Test {
protected:
int parse(const std::string& s) { return std::stoi(s); }
};
TEST_F(ParserTest, ParsesNumber) {
EXPECT_EQ(parse("42"), 42);
}Глобальное окружение
Для настройки на уровне всего процесса (однократного запуска перед любым тестом) зарегистрируйте ::testing::Environment с помощью AddGlobalTestEnvironment. Это полезно для ведения журнала или инициализации фреймворка.
Сохранение независимости тестов
Поскольку каждый TEST_F получает новую фикстуру, никогда не полагайтесь на побочные эффекты другого теста. Независимость упрощает диагностику сбоев и делает тесты безопасными для параллельного запуска.
Быстрая проверка
Вспомните жизненный цикл фикстуры.
Итоги
Вы изучили фикстуры.
- Наследуйтесь от
::testing::Testи используйтеTEST_F SetUp/TearDownвыполняются для каждого теста, каждый раз создаётся новый объект- Используйте
SetUpTestSuiteдля общих ресурсов, создаваемых один раз на набор - Вспомогательные методы и глобальные окружения помогают работать с большими наборами тестов
Часто задаваемые вопросы
Урок «Фикстуры и настройка» бесплатный?
Да — полный текст урока «Фикстуры и настройка» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.
Чему я научусь в уроке «Фикстуры и настройка»?
Используйте общую настройку тестов Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C++ Academy?
Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Фикстуры и настройка»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C++ Academy?
Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Настройка GTest
- Проверки и сопоставители
- Фикстуры и настройка
- Имитация с GMock