
Тестовые фикстуры (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*()
будут все равно запущены, чтобы освобождение ресурсов произошло корректно.