有時候,測試用例需要呼叫某些依賴於全域性配置的功能,或者這些功能本身又呼叫了某些不容易測試的**(例如:網路接入)。fixture monkeypatch
可以安全的設定/刪除乙個屬性、字典項或者環境變數,甚至改變匯入模組時的sys.path
路徑。
monkeypatch
提供了以下方法:
所有的修改將在測試用例或者fixture
執行完成後撤銷。raising
引數表明:當設定/刪除操作的目標不存在時,是否上報keyerror
和attributeerror
異常。
猴子補丁主要有以下幾個用處:
在執行時替換方法、屬性等
在不修改第三方**的情況下增加原來不支援的功能
在執行時為記憶體中的物件增加patch而不是在磁碟的源**中增加
參考:
Python 猴子補丁
生活中衣服破了洞,我們不想將其丟掉,就會打個補丁縫縫補補講究著用,這種理解帶入程式中也是這樣,個別功能有問題,但我們並不想將其重構或丟掉,只想將其個別功能替換,這就是打補丁的概念,為啥稱呼為猴子補丁這就不得而知了,但我們要知道打補丁是種補救措施,並不一定是好事不要濫用 程式中某個功能使用不理想效率低...
python 猴子補丁 Monkey patch
用來在執行時動態修改已有的 而不需要修改原始 在用gevent時 可實現併發同步非同步程式設計 會在最開頭的地方gevent.monkey.patch all 把標準庫中的thread socket等給替換掉.這樣我們在後面使用socket的時候可以跟平常一樣使用,無需修改任何 但是它變成非阻塞的了...
協程 猴子補丁
from greenlet import greenlet import time def task1 temp print print 執行任務a str2 b.switch time.sleep 1 print 執行任務a完成 str str2 str temp def task2 print ...