Тестирование Django: Обработка ошибок в setUpTestData
Я хочу написать тест для команды загрузки данных, которая создает большое количество (тысячи) объектов, связанных между собой внешними ключами. Есть два способа структурировать его
- Вызовите команды управления в
setUpTestData
, а затем напишите тесты на согласованность данных как обычные тесты - Напишите один большой тестовый метод для запуска команд управления, а затем подтесты для проверки согласованности данных .
Подтесты - это функция Python unittest, которую унаследовал прогонщик тестов Django:
with self.subTest("Subtest Foo"):
self.assertFalse( True) # FAIL message includes [Subtest Foo]
with self.subTest("Subtest Bar"):
self.assertFalse( True) # and failure doesn't stop the next subtest from running
Есть ли какая-то конкретная причина предпочесть один вариант другому? Обертывает ли setUpTestData
весь класс в транзакцию БД, так что БД тестов остается неизменной в случае сбоя здесь, а не внутри одного или нескольких тестов?
Кстати, я никогда не встречал упоминаний о том, как написать тест, который никогда не будет выполняться, пока команда ./manage.py test ...
не попросит об этом явно. Так что это может быть кому-то полезно:
from unittest import skipIf
import sys
@skipIf( not 'test123' in sys.argv, "Runs only with --tag test123")
@tag('test123')
class Test03( TestCase):
...
будет выполняться Test03
тогда и только тогда, когда будет вызвано ./manage.py test ... --tag test123