我經常需要編寫一個命令行腳本,它將讀取數據庫,執行一些分析並將結果寫回數據庫。我努力讓一般脫鉤,並創建一個單獨的數據層是寫劇本load.py
,write.py
和do_analytics.py
其中負載和寫做數據庫的交互,和do_analytics.py
文件是這樣的:在Python中測試數據庫讀/寫加分析腳本
import load
import write
def batch_classify(model_filepath='my_model.pkl'):
with open(model_filepath, 'rb') as infile:
model = pickle.load(infile)
data_loader = load.DataLoader()
data_loader.load_data()
data_loader.clean_data()
data = data_loader.data
# Maybe do some more manipulations here...
output = model.transform(data)
data_writer = write.DataWriter()
data_writer.write_data(output)
if __name__ == "__main__":
# maybe would have some command line options here to pass to batch_classify
batch_classify()
我現在想測試一些固定的數據集,並確保分類(輸出)結果是我所期望的。我現在不需要測試實際的數據庫連接,所以基於一些研究,我想我想嘲笑this post,但我不確定應該嘲笑什麼級別的對象,如何正確地重構以實際測試一旦我有了嘲弄的對象,如果這是最好的辦法。當以前出現這種情況時,我已經通過實際數據庫中的小型固定測試表獲得解決方案,但它絕不是優雅或乾淨的代碼。
謝謝,這看起來不錯。爲了澄清,最好的做法是選擇將DatabaseProvider對象 - 實型還是模型 - 傳遞給實例化的AnalyticManager? – elphz
在Python中,您不必在單元測試中傳遞選項進行嘲諷。請參閱test_analytic_manager.py。在實現數據庫提供程序之前,您可以使用此類來測試您的邏輯, – M07