使用硬编码全局变量的模拟装饰器

时间:2021-07-14 12:20:44

标签: python unit-testing

当尝试对下面看到的代码片段进行单元测试时,我受到包装 calc_something 函数的装饰器给我的时间限制的限制。似乎我无法在我的单元测试中覆盖 RAND_RATE 从那时起我导入了包含我的实现的模块,装饰器已经包装了我的函数。我该如何解决这个问题?

RAND_RATE=20
RAND_PERIOD=10

@limits(calls=RAND_RATE, period=RAND_PERIOD)
def calc_something():
    ...

1 个答案:

答案 0 :(得分:0)

在不确切知道 limits 的作用的情况下,我们不知道可以修补什么(如果有的话)。相反,保留基本实现未修饰以供单元测试使用。 calc_something 将保存为手动应用 limits 的单独结果。

RAND_RATE=20
RAND_PERIOD=10

def _do_calc():
    ...


calc_something = limits(calls=RAND_RATE, period=RAND_PERIOD)(_do_calc)
@limits(calls=RAND_RATE, period=RAND_PERIOD)
def calc_something():
    ...

现在在你的测试中,你可以定义任何你喜欢的装饰版本:

test_me = limits(10, 5)(my_module._do_calc)