
Тестовые фикстуры (test fixtures) – особые условия, которые создаются для выполнения тестов. Сюда могут входить такие вещи:
▸ Подготовка тестовых данных
▸ Создание подключений к БД, сервисам и т.п.
▸ Создание заглушек (mock) для имитации компонентов программы
▸ Другие действия по поддержке рабочего окружения для проведения теста
Пример: у вас программа, которая вычисляет вычисляет число π до n-знака, и вам нужно протестировать, как будет выведен на экран миллионнный знак. Вы же не будете в тесте ждать вычисления всех предыдущих 999,999 знаков часами, а просто загрузите какие-то данные в память, чтобы создать условия, как будто мы уже на миллионом знаке.
В unittest фикстуры можно создавать на уровне модуля с тестами, отдельного класса (от
unittest.TestCase) и каждого метода в классе теста. Метод
setUp() вызывается перед каждым вызовом метода test* в классе тестового случая.Классовый метод
setUpClass() вызывается один раз перед запуском тестов в классе тестового случая.Функция
setUpModule() вызывается перед выполнением тестовых случаев в этом модуле.У них есть пары, предназначенные для освобождения ресурсов (закрытия соединений, удаления временных файлов и т.п.):
tearDown() – после каждого метода-теста в классе.tearDownClass() – после всех тестов в классе.tearDownModule() – после всех классов в модуле.📎 В примере изучим порядок вызовов этих функций:
import unittest
class StringTestCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print(' - set up class')
    def setUp(self):
        print(' - - set up method')
        self.foo = "foo"
        self.bar = "bar"
    def test_sum(self):
        self.assertEqual(self.foo + self.bar, "foobar")
    def test_lower(self):
        self.assertTrue(self.foo.islower())
    def tearDown(self):
        print(' - - tear down method')
    @classmethod
    def tearDownClass(cls):
        print(' - tear down class')
def setUpModule():
    print('set up module')
def tearDownModule():
    print('tear down module')
if name == '__main__':
    unittest.main()
Даст такую схему вызовов:set up module
 - set up class 
 - - set up method
 - - tear down method
 - - set up method
 - - tear down method
 - tear down class
tear down moduleДаже если в одной из этих или тестовых функций произошло исключение, то прочие методы
tearDown*() будут все равно запущены, чтобы освобождение ресурсов произошло корректно.
        
      
      




