Тестирование Django: Обработка ошибок в setUpTestData

Я хочу написать тест для команды загрузки данных, которая создает большое количество (тысячи) объектов, связанных между собой внешними ключами. Есть два способа структурировать его

  1. Вызовите команды управления в setUpTestData, а затем напишите тесты на согласованность данных как обычные тесты
  2. Напишите один большой тестовый метод для запуска команд управления, а затем подтесты для проверки согласованности данных
  3. .

Подтесты - это функция 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

Вернуться на верх