2013-09-27 20 views
2

使用文件IO進行單元測試的正確方法是什麼,尤其是涉及到PyTables和HDF5時?使用PyTables和HDF5進行Python單元測試

我的應用程序圍繞着從hdf5文件存儲和檢索python數據而發展。到目前爲止,我只是在單元測試中自己寫hdf5文件並加載它們進行比較。問題是我當然不能確定其他人是否運行測試,他有權將文件寫入硬盤。 (當我想使用Jenkins這樣的自動化測試框架時,這可能會變得更糟,但我還沒有檢查過)。

什麼是處理這些情況的正確方法?在寫入訪問權限很可能被授予的特定位置創建/ tmp /文件夾是否是最佳做法?如果是這樣,那是哪裏?還是有一種簡單而直接的方式來模擬PyTables的書寫和閱讀?

非常感謝!

回答

1

如何使用模塊「tempfile」創建文件?

http://docs.python.org/2/library/tempfile.html

如果它保證在所有平臺上工作,但我敢打賭,它在最常見的工作,我不知道。將硬編碼「/ tmp」作爲目的地肯定會更好。

另一種方法是在內存中創建一個HDF5數據庫,以便不需要文件I/O。

http://pytables.github.io/cookbook/inmemory_hdf5_files.html

我獲得的鏈接通過谷歌搜索「內存HDF5」所以我不能肯定地說是否能正常工作。

我認爲最好的做法是編寫所有測試用例,以針對內存數據庫和臨時文件數據庫運行。這樣,即使上述技術之一對用戶失敗,其餘的測試仍然會運行。您也可以單獨確定錯誤是否與文件寫入或數據庫內部相關。

+0

你不能真的使用tempfile,因爲pytables/hdf5將創建自己的文件句柄,並且不能使用你提供的文件句柄。 –

1

基金會,HDF5和Pytables是I/O庫。他們提供了一個用於文件系統操作的API。因此,如果您真的想測試PyTables/HDF5,則必須打開文件系統。這是沒有辦法的。如果用戶在系統上沒有寫訪問權限,他們將無法運行測試。或者至少他們不能運行現實的測試。

您可以使用內存文件驅動程序進行測試。這對加快大多數測試和測試更高級別的功能非常有用。然而,即使你走這條路線,你仍然應該有一些測試,它們實際上寫出了真實的文件。如果這些失敗,你就會知道有什麼不對。

通常,人們在測試目錄中創建臨時h5文件。但是,如果您真的擔心用戶無法訪問此目錄,則應使用tempfile.gettempdir()來查找其環境的正確/ tmp目錄。請注意,這是跨平臺的,所以應該在任何地方工作。把你創建的h5文件放在那裏,記得把它們刪除!