[英]Using python decorator to decorate a part of function
我正在嘗試模擬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,這很簡單。 然后運行測試函數,該函數將添加腳本並在git命令周圍添加with self.script
,然后恢復該函數。
反正有做嗎? 裝飾器是實現它的壞方法嗎? 這不是化妝品要求。 我需要這樣做,因為在某些命令中有重試邏輯,為此我需要提供多個腳本來模擬進程並運行多次。
如果我對您的理解正確,則希望覆蓋函數的命名自由變量。 您可以使用fun.func_globals[some_name] = some_value
。 例如
def x(a):
pow2(a)
x.func_globals['pow2'] = lambda y: y*y
x(3) == 9
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.