0
最近,我發現模塊是Python中的單例。這很好,因爲在有些情況下,這種模式很有用。測試單身選項模塊
就我個人而言,我喜歡將它用於各處共享的模塊,如選項。
例如,這裏有一個非常簡單的選項模塊使用argparse:
#options.py
import argparse
parser = argparse.ArgumentParser(prog='myoptions')
parser.add_argument('-c', action='store')
options = parser.parse_args()
每當我import options
,該代碼被執行一次,變量options
包含解析的所有選項。太好了!
除了現在,我想測試這個。但我的方式編碼這使得它很難對其進行測試:
- 當我導入模塊在我的測試文件,argparse試圖解析argv的,它失敗了,因爲argv的是從單元測試 一
- 因爲它只加載和執行一次,所以我只能測試選件模塊的一部分。導入
options
多次不起作用。
我可以通過在函數中包裝parse_args
調用並在每個單元測試中調用此函數來快速解決此問題。但是,在我的「真實」代碼中,無論何時我需要一個選項,我將不得不導入選項模塊,然後執行「包裝函數」,它將解析參數並給出選項。
這是可行的,但它並不漂亮,這是因爲:
- 我將不得不進口+調用「分析」函數需要一個選項
- 它將執行的
argv
每一個解析的任何模塊通常情況下,它應該執行一次。
那麼,我該如何使這個代碼既單元測試又易於使用?
感謝您的幫助!
可能的重複[如何設置sys.argv,以便我可以單元測試?](http://stackoverflow.com/questions/18668947/how-do-i-set-sys-argv-soi-i -can-unit-test-it) – TemporalWolf
對不起,但這不是重複的,至少不是直接的。如果你改變了sys.argv,它將會起作用,但只能進行一次測試,因爲代碼被導入/執行一次。我知道這是因爲我試過:) – sterfield