我正在尝试模拟我们的git包装器,以便我们可以测试它。我计划使用mockproc python库,它提供了使用提供的脚本模拟任何进程名称的功能。它的工作原理是这样的 -
self.scripts.append( 'process-name', returncode=0, stdout="output to process" )
with self.scripts:
run_and_handle_result()
我需要在这上面添加一个装饰层,以便我可以做一些额外的事情,比如句柄重试。我想要的是这样的东西 -
@mockproc('git') # tells that we are mocking git
def test_something(mock_proc):
mock_proc.set_script("sleep (60)")
# Run some git command
mockproc.check_exit_signal()
问题是我希望装饰师处理with self.scripts
部分。所以我想要的是装饰器运行该函数,将进程名称设置为git,这很简单。然后运行test函数,该函数添加脚本并在git命令周围添加with self.script
,然后恢复该函数。
反正有吗?是装饰者实施它的坏方法吗?这不是化妆品要求。我需要这个,因为在我的一些命令中有重试逻辑,我需要为mockproc提供多个脚本并多次运行。
答案 0 :(得分:1)
如果我理解正确,您想要覆盖函数的命名自由变量。您可以使用fun.func_globals[some_name] = some_value
。 E.g。
def x(a):
pow2(a)
x.func_globals['pow2'] = lambda y: y*y
x(3) == 9