Django TestCase Mixin тестируется индивидуально, как предотвратить? - PullRequest
0 голосов
/ 17 февраля 2019

Я написал миксин для тестового набора Django для тестирования сериализаторов.Сериализаторы, которые я хочу протестировать, используют этот миксин и работают как положено.Однако сам миксин имеет плохую привычку проверяться, не находясь в каталоге /tests.Мне интересно, что может вызвать эту проблему и как я могу решить эту проблему.

У меня есть следующая структура:

| /project (urls, wsgi, etc)
| /shared
|    /mixins
|       testcase.py <- Handled as individual testcase (renaming does not work)
|                      It should NOT run the tests in this file when it is not
|                      NOT extended by a TestCase using the mixin.
|    /tests
|       test_xyz.py
| /users
|    /tests
|       /serializers
|           test_serializer.py <- Extending the testcase mixin, only this file
|                                 should run the test_ methods from the mixin.
| manage.py

Ожидается, что users.tests.serializers.test_serializer TestCase, который расширяет shared.mixins.testcase.SerializerTestCaseMixnзапускает тесты из миксина.При запуске ./manage.py test users отлично запускает тесты.

Проблема начинается при запуске ./manage.py test без определенного приложения.Что происходит, так это то, что shared.mixins.testcase.SerializerTestCaseMixin выполняется как отдельный TestCase.Хотя только имя метода содержит test_ в миксине, но не расширяет TestCase и не находится в каталоге */tests/.

Некоторые примеры кода текущей ситуации:

shared.mixins.testcase.SerializerTestCaseMixin

class SerializerTestCaseMixin:
    x = None

    def test_something(self):
        self.assertNotNone(x)

users.tests.user.serializers.test_serializer.py

    class UserSerializerTestCase(SerializerTestCaseMixin, TestCase):
        x = 10
        def test_xxx(self):
            ...

Таким образом, при запуске ./manage.py test users тест в mixin проходит, так как x имеет значение 10 и не равно None.При запуске ./manage.py test тесты в users app проходят, но также неожиданно запускаются shared.mixins.testcase.SerializerTestCaseMixin.test_something и не выполняются проверки, поскольку у него нет доступа к классу TestCase, поскольку он не расширяет TestCase через SerializerTestCase.

Не могу понять, почему shared.mixins.testcase.SerializerTestCaseMixin тестируется индивидуально при запуске всех тестов.Любые предложения, что вызывает это?

  • Python 3,6
  • Django 2,1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...