gpt4 book ai didi

Python mock 修补函数装饰器的参数值

转载 作者:行者123 更新时间:2023-12-04 18:05:46 25 4
gpt4 key购买 nike

假设我有一个 settings.py

value = 10

我有一个这样的功能,在模 block a 中有一个装饰器
import settings

@some_decorator(repeat=settings.value):
def do_work():
print settings.value
// prints 1
...

在单元测试中,我试图将 settings.value 修补为 1,如下所示:
with patch('settings.value', new=1):
do_work()

但是 do_work 函数仍然重复 10 次,我认为装饰器的参数没有被修补,因为它在单元测试开始之前被执行。我该如何改变?

最佳答案

简而言之,您无法修补 传递给装饰器参数。

无论如何,你写的不能工作,因为当 do_work()装修settings.value10并且在那之后您无法更改它:它不是在运行时解析的变量,而只是一个值(不可变)。

当然,当do_work()被执行 settings.value1然后打印 1但装饰中使用的值do_work()还在10并且无法改变。

你如何解决它?如果你不能改变装饰器我看不出有什么方法可以做到,否则你必须在装饰器中考虑repeat应该是可调用的,并在每次调用装饰函数时解析它。

关于Python mock 修补函数装饰器的参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26985609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com