Тестирование дескрипторов Python

У кого-нибудь есть какие-либо советы или рекомендации по тестированию дескрипторов Python?

Я пишу некоторые дескрипторы для инкапсуляции проверки данных и хочу написать тесты для них.

Во-первых, мне интересно, стоит ли мне проверять их, создавая экземпляры дескрипторов в моих тестах, а затем вызывая __get__ или же __set__ методы явно.

Или я должен создать специальный класс в моем тестовом файле, который использует класс дескриптора, а затем использовать этот класс в моих тестах?

Или я должен добавить дескриптор в мой подкласс unittest.TestCase?

Любые другие советы будут оценены.

1 ответ

Решение

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

Таким образом, у вас также будет гораздо больше контроля над тем, что именно передается; вы можете смоделировать аргументы типа и экземпляра для вашего сердца.

import unittest


class MockClass(object):
    # add any methods to assert access here


class DescriptorTests(unittest.TestCase):
    def _make_one(self, *args, **kw):
        from original_module import DescriptorClass
        return DescriptorClass(*args, **kw)

    def test_class_access(self):
        # only a type is passed in, no instance
        desc = self._make_one()
        res = desc.__get__(None, MockClass)
        self.assertEqual(res.someattribute, 'somevalue')

    # etc.  


if __name__ == '__main__':
    unittest.main()
Другие вопросы по тегам