How Django';s";覆盖“U设置”;decorator在并行启动测试时工作
我正在检查Django的设置模块是如何构建的,以及decorator在测试时是如何处理设置的,我只是看不出这个decorator的设计在并行运行测试时是如何避免问题的 我看到它在How Django';s";覆盖“U设置”;decorator在并行启动测试时工作,django,django-testing,Django,Django Testing,我正在检查Django的设置模块是如何构建的,以及decorator在测试时是如何处理设置的,我只是看不出这个decorator的设计在并行运行测试时是如何避免问题的 我看到它在启用方法中为设置的属性指定了设置值和应用的更改,并存储了以前值的副本,然后在禁用方法中恢复。当我秘密地执行它时,这对我来说是可行的。但是当并行运行测试时,如果不影响其他也使用decorator的测试,比如覆盖相同的值,我就看不出这是如何工作的。我看到的是,在访问settings.overrided\u SETTING时,
启用
方法中为设置的属性指定了设置值和应用的更改,并存储了以前值的副本,然后在禁用
方法中恢复。当我秘密地执行它时,这对我来说是可行的。但是当并行运行测试时,如果不影响其他也使用decorator的测试,比如覆盖相同的值,我就看不出这是如何工作的。我看到的是,在访问settings.overrided\u SETTING时,最新执行的测试设置的值将返回到任何地方。事实上,此设置重写还应该影响在其他测试中返回的值,即使这些值没有被修饰
我的意思是,如果我们有这两个测试:
@override_settings(SETTING=1):
def test_1(self):
...
...
print(settings.SETTING)
@override_settings(SETTING=2):
def test_2(self):
...
...
print(settings.SETTING)
def test_3(self):
...
...
print(settings.SETTING)
如果它们并行运行,假设执行了test\u 1
,则开始执行它的代码,同时在执行test\u 1
中的print
语句之前调用test\u 2
,方法是检查decorator实现,我希望他们两人都打印2
,作为他们打印的结果。根据执行时间的不同,test_3
将返回原始值1,如果它也是并行运行的,则返回2
一定有什么我没有考虑到的,因为我不认为这段代码在存在这么长时间后会出现这种竞争情况
任何有助于理解这一点的帮助都将不胜感激