В `unittest` фикстуры создаются методами `setUp` и `tearDown` (для каждого теста) или `setUpClass` и `tearDownClass` (один раз для класса).
setUp: Выполняется перед каждым тестом. Здесь создаются общие ресурсы, необходимые для тестов.
tearDown: Выполняется после каждого теста. Здесь освобождаются ресурсы, созданные в `setUp`.
setUpClass: Выполняется один раз перед всеми тестами в классе. Обычно используется для инициализации ресурсов, общих для всех тестов.
tearDownClass: Выполняется один раз после всех тестов в классе. Используется для освобождения ресурсов, инициализированных в `setUpClass`.
Пример:
import unittest
class MyTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.resource = "Общий ресурс"
        print("setUpClass")
    @classmethod
    def tearDownClass(cls):
        print("tearDownClass")
    def setUp(self):
        self.data = [1, 2, 3]
        print("setUp")
    def tearDown(self):
        print("tearDown")
    def test_something(self):
        self.assertEqual(len(self.data), 3)
        print("test_something")
    def test_another(self):
        self.assertEqual(self.resource, "Общий ресурс")
        print("test_another")
  В `unittest` фикстуры используются для настройки и очистки тестовой среды до и после выполнения тестов. Они обеспечивают повторяемость и изоляцию тестов, подготавливая общие ресурсы или данные, необходимые для работы тестов.
В `unittest` фикстуры реализуются с помощью специальных методов, которые вызываются автоматически фреймворком:
Пример:
    
import unittest
import os
class MyTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        # Создаем временную директорию для всех тестов в классе
        cls.temp_dir = "temp_test_dir"
        if not os.path.exists(cls.temp_dir):
            os.makedirs(cls.temp_dir)
    @classmethod
    def tearDownClass(cls):
        # Удаляем временную директорию после всех тестов в классе
        import shutil
        shutil.rmtree(cls.temp_dir)
    def setUp(self):
        # Создаем временный файл для каждого теста
        self.temp_file = os.path.join(self.temp_dir, "temp_file.txt")
        with open(self.temp_file, "w") as f:
            f.write("This is a test file.")
    def tearDown(self):
        # Удаляем временный файл после каждого теста
        os.remove(self.temp_file)
    def test_file_exists(self):
        self.assertTrue(os.path.exists(self.temp_file))
    def test_file_content(self):
        with open(self.temp_file, "r") as f:
            content = f.read()
        self.assertEqual(content, "This is a test file.")
if __name__ == '__main__':
    unittest.main()
    
  
  В этом примере:
Фикстуры `setUpClass` и `tearDownClass` выполняются только один раз для всех тестов в классе, в то время как `setUp` и `tearDown` выполняются перед и после каждого отдельного теста.
Использование фикстур делает тесты более читаемыми, поддерживаемыми и обеспечивает их изоляцию, предотвращая влияние одного теста на другой.