Evg*_*eny 10 python unit-testing unittest2
我有一个装饰器,我想断言我的代码中的某些方法是用它装饰的.
import functools
def decorator(func):
def _check_something(*args, **kwargs):
# some logic in here
return func(*args, **kwargs)
return functools.wraps(func)(_check_something)
class MyClass(object):
@decorator
def my_method(foo, bar):
pass
Run Code Online (Sandbox Code Playgroud)
我如何断言unittest(unitttest2)my_method
有@decorator
没有人删除它,并没有忘记?
如果由于某种原因您无法修改装饰器,则还可以尝试检查封闭变量的某些特征。
在您的示例中,您知道原始my_method
是装饰器关闭的唯一变量,因此您可以:
assert (my_method.__closure__ and
my_method.__closure__[0].cell_contents.__name__ == my_method.__name__)
Run Code Online (Sandbox Code Playgroud)
您可以通过依赖装饰器用一个属性标记包装器函数来做到这一点,然后断言该属性。
一个好的做法是让装饰器设置一个__wrapped__属性,指向返回的包装器上的原始函数。
因此:
def decorator(func):
@functools.wraps(func)
def _check_something(*args, **kwargs):
# some logic in here
return func(*args, **kwargs)
_check_something.__wrapped__ = func # <== add this
return _check_something
Run Code Online (Sandbox Code Playgroud)
然后,在您的测试代码上:
assert getattr(MyClass.my_method, "__wrapped__").__name__ == 'my_method'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3153 次 |
最近记录: |