我正在編寫一個Flask應用程序,並正在編寫測試過程。在我foo/__init__.py
,我讀的配置文件:如何使用全局設置文件測試應用程序?
from flask import Flask
app = Flask(__name__)
from .conf import read_config
settings = read_config()
我用foo.settings
貫穿我的應用程序,這使得測試非常困難的一個全局對象。
例如:
import json
from foo import settings
from .helper import get_hosts_status
@app.route("/hosts/status")
def hosts_status():
assert 'is_production' in settings
data = {
"num_hosts_up" : get_hosts_status(settings['is_production'])
}
return json.dumps(data)
在上述路線,測試代碼,因爲settings
對象從foo
進口,使得代碼天生狀態是非常困難的。由於settings
不是該函數的參數,因此我不能簡單地模擬該對象。
我一直在試圖重構我的應用程序,但我似乎無法避免使用某種類似這樣的全局範圍的對象。有沒有一種可以接受的方法來測試依賴像我的settings
對象這樣的全局對象的函數,還是有一種方法可以重構這個方法,使得它更易於測試?
您可以['unittest.mock.patch.dict'](https://docs.python.org/3/library/unittest.mock.html#unittest.mock .patch.dict)。然後你可以替換特定的鍵或整個事情。 – jonrsharpe
@jonrsharpe這似乎很有希望 - 我會看看。歡呼的資源! – erip