Назад к вопросам
Junior
124
questionbank
Что такое фикстуры?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Фикстуры (fixtures) в контексте тестирования, особенно в Java с использованием фреймворков типа JUnit или TestNG, — это состояние тестовой среды, которое готовится до выполнения тестовых методов и очищается после их завершения.
Они используются для:
- Установки начальных условий: Создание необходимых объектов, подключение к базам данных, настройка моков и т.д.
- Поддержания изоляции: Гарантия того, что каждый тест выполняется в чистой и предсказуемой среде, не зависящей от других тестов.
- Экономии времени: Избегание дублирования кода для подготовки среды в каждом тесте.
JUnit предлагает аннотации для управления фикстурами:
@BeforeAll(или@BeforeClassв JUnit 4): Выполняется один раз перед всеми тестовыми методами в классе. Используется для настройки ресурсов, требующих значительных затрат (например, создание подключения к базе данных).@BeforeEach(или@Beforeв JUnit 4): Выполняется перед каждым тестовым тестовым методом. Используется для создания объектов, специфичных для конкретного теста.@AfterEach(или@Afterв JUnit 4): Выполняется после каждого тестового метода. Используется для очистки ресурсов после теста.@AfterAll(или@AfterClassв JUnit 4): Выполняется один раз после всех тестовых методов в классе. Используется для закрытия ресурсов, открытых в@BeforeAll.
Пример использования в JUnit 5:
// import'ы
class MyServiceTest {
private MyService myService;
private Connection dbConnection;
@BeforeAll
static void setupDatabaseConnection() {
// Установить соединение с базой данных один раз
// dbConnection = DriverManager.getConnection("jdbc:...");
System.out.println("Database connection established.");
}
@AfterAll
static void closeDatabaseConnection() {
// Закрыть соединение с базой данных один раз
// if (dbConnection != null) dbConnection.close();
System.out.println("Database connection closed.");
}
@BeforeEach
void setUpEachTest() {
// Создать новый экземпляр сервиса перед каждым тестом
myService = new MyService(/* dependency injection */);
System.out.println("MyService instance created.");
}
@AfterEach
void tearDownEachTest() {
// Очистить состояние или сбросить моки после каждого теста
myService = null;
System.out.println("MyService instance cleared.");
}
@Test
void testMethod1() {
// Тестовая логика, использующая myService
System.out.println("Executing testMethod1");
}
@Test
void testMethod2() {
// Тестовая логика, использующая myService
System.out.println("Executing testMethod2");
}
}