我写了一个正确工作的装饰器,但是我偶然发现了试错法的正确解决方案,而且我的关于装饰器的知识告诉我某些东西没有很好的定义。了解我自己的装饰器
这种情况是我嘲笑一个Rest Api来做一些TDD,而这个Rest是一个令牌安全。所以在提出任何请求之前,我首先必须获得我的用户令牌。我使用httpretty来模拟API。
到目前为止,我不得不在每个测试用例中register_uri,一个用于模拟/ token资源,另一个用于测试任何其他资源。但是我发现这非常麻烦,所以有了一个解决方案来写一个简单的装饰器来模拟/标记,然后只需要嘲笑测试资源。
这是我目前正在装饰...
def activate_security(func):
def test_case(test_case):
httpretty.enable()
uri = 'http://{}:{}/token'.format(HOST, PORT)
httpretty.register_uri(httpretty.GET, uri,
body=dumps({'token': 'dummy_token'}),
content_type='application/json')
test_case()
httpretty.disable()
return test_case
这是怎么叫。
@activate_security
@httpretty.activate
def test_case_one(self):
#Test case here
我不得不通过test_case参数的内部函数“原因没有它不会工作,这是test_case方法test_case_one,我认为这将在FUNC参数传递,但在FUNC外部作用域将对象保存在test_case的内存中。
应该不是func装饰器的返回值吗?如果我这样做,装饰者不起作用。当内部函数传递该参数?
非常感谢。特别是关于functools.wraps – cllamach 2014-12-01 18:59:34