У меня есть декоратор, который принимает два параметра callback
и onerror
, оба должны вызываться как-то так
class mydecorator(object):
def __init__(self, callback, onerror=None):
if callable(callback):
self.callback = callback
else:
raise TypeError('Callable expected in "callback" parameter')
self.onerror = onerror
if self.onerror and not callable(self.onerror):
raise TypeError('Callable expected in "onerror" parameter')
def __call__(self, func):
return self.__param__call__(func)
def __param__call__(self, func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
try:
self.callback()
except MyCustomException as e:
if self.onerror:
self.onerror(e.message, e.data)
else:
raise
return result
return wrapper
Я хотел бы проверить, передал ли я неверный параметр, например, не вызываемый, он должен поднять TypeError
Использование Python unittest
Каков наилучший подход для достижения этой цели? Я готов сделать что-то вроде:
def test_non_callable_callback_should_return_type_error(self):
try:
@mydecorator('this_is_not_a_callable')
def my_phony_func():
pass
except TypeError:
# Correctly has raised a TypeError, lets just pass
pass
else:
# It has not raised an TypeError, let's fail
self.fail('TypeError not raised when a non callable passed to callback')
Это должно быть лучше, не так ли?