#c# #python #unit-testing
#python #c# #модульное тестирование #атрибуты
Вопрос:
Недавно я хочу имитировать атрибут C # в python для своих модульных тестовых примеров.
class SmokeTest(unittest.TestCase):
@Tags(Tags.BVT)
@TestCategory('login')
def test_login(self):
pass
Если все в порядке, я мог бы написать тестовый запуск для поиска тестовых примеров с этими атрибутами (например, я хочу запускать все тестовые примеры с логином категории). После долгих размышлений я получил следующий ответ
class Attribute(object):
'''
To simulate `attribute` in C#
'''
def __call__(self, f):
def wrapper(this, *args, **kwargs):
return f(this, *args, **kwargs)
try:
wrapper._attributes = f._attributes
wrapper._attributes.append(self)
except:
wrapper._attributes = [self]
return wrapper
class TestCategory(Attribute):
'''
Class used to specify the category of a unit test
'''
def __init__(self, name):
self._name = name
@property
def Name(self):
return self._name
Реализация проста, просто добавьте свойство ‘_attributes’ для функций, чтобы хранить все атрибуты. Однако это выглядит несколько уродливо!
Мой вопрос в том, есть ли какое-либо лучшее решение?
Комментарии:
1. К вашему сведению, для добавления к атрибутам функции (в смысле OO) подобным образом вам не нужна оболочка. Просто создайте
f._attributes
, если его там нет, и добавьте к нему.2. Привет, Делнан, ты прав, оболочка избыточна.