假设我有一个settings.py
value = 10
我有一个这样的函数,模块内有一个装饰器
import settings
@some_decorator(repeat=settings.value):
def do_work():
print settings.value
// prints 1
...
在unittest中我试图将settings.value修改为1,如下所示:
with patch('settings.value', new=1):
do_work()
但do_work函数仍然会重复10次,我不认为装饰器的参数已修补,因为它在单元测试开始之前执行。我该如何改变?
答案 0 :(得分:0)
尝试覆盖设置?
https://docs.djangoproject.com/en/1.7/topics/testing/tools/#overriding-settings
@override_settings(LOGIN_URL='/other/login/')
def test_login(self):
答案 1 :(得分:0)
简而言之,您无法修补传递给装饰器参数的值 。
无论如何你写的都行不通,因为当do_work()
被装饰时settings.value
是10
并且之后你无法改变它:它不是在运行时被解析的变量但是只是一个值(不可变)。
当然,执行do_work()
时settings.value
为1
,然后打印1
,但装饰do_work()
中使用的值仍为{{1}并且无法改变。
你如何解决它?如果您无法更改装饰器,我看不到任何方法,否则您必须在装饰器中考虑10
应该是可调用的,并在每次调用装饰函数时解决它。