Определение методов тестирования в базовом классе, экземпляры которых не следует создавать напрямую.Python

Программы на Python
Anonymous
Определение методов тестирования в базовом классе, экземпляры которых не следует создавать напрямую.

Сообщение Anonymous »

Я пытаюсь создать тестовые примеры, которые различаются только тем, какой пользователь вошел в систему.
Поэтому я решил определить тесты в базовом классе и создать подклассы, которые регистрируют пользователя во время setUp() было бы правильным решением.
Однако я не могу найти элегантного решения, позволяющего исключить запуск тестов в базовом классе.

Код: Выделить всё

from django.contrib.auth.models import User
from django.test import TestCase

class A(TestCase):
@classmethod
def setUpTestData(cls):
cls.user_a = User.objects.create_user("a", "", "a")
cls.user_b = User.objects.create_user("b", "", "b")

def setUp(self):
# global set up stuff here
...

def test_1(self):
self.assertEqual(self.user_a.username, "a")

class SubA(A):
def setUp(self):
super().setUp()
self.client.force_login(self.user_a)

class SubB(A):
def setUp(self):
super().setUp()
self.client.force_login(self.user_b)
В приведенном выше коде я бы хотел, чтобы запускались только унаследованные тесты в классах SubA и SubB, но не тест в A .
Я пробовал:
  • извлечь базовый класс в другой модуль, который не включен в поиск по умолчанию. шаблон.
    => по-прежнему запускает тесты, поскольку базовый класс должен быть импортирован для наследования от него
  • определение функции load_tests(...) в пакете который исключает базовый класс
    => тот же результат, что и выше
  • вызов unittest.SkipTest в базовом классе setUp() и перехват его в setUp подклассов
    => работает, но добавляет все тесты в базовом классе как «пропущенные»
Поэтому мой вопрос: :
Есть ли способ исключить запуск тестов в базовом классе (который должен наследовать от Django TestCase) без записи их как пропущенных и, желательно, без необходимости использования дополнительных параметров в моем ./ команда Manage.py test?

Подробнее здесь: https://stackoverflow.com/questions/785 ... d-directly

Вернуться в «Python»