2010-06-14 65 views
1

我正在對一個試圖打開一個新文件的函數進行一些單元測試,但是如果這個文件已經存在就會失敗。當功能成功地運行時,創建新文件,所以我要讓每個試運行後刪除它,但它似乎並不奏效:python單元測試os.remove文件系統失敗

class MyObject_Initialisation(unittest.TestCase): 
    def setUp(self): 
     if os.path.exists(TEMPORARY_FILE_NAME): 
      try: 
       os.remove(TEMPORARY_FILE_NAME) 
      except WindowsError: 
       #TODO: can't figure out how to fix this... 
       #time.sleep(3) 
       #self.setUp() #this just loops forever 
       pass 

    def tearDown(self): 
     self.setUp() 

有什麼想法?拋出的Windows錯誤似乎表明該文件正在使用中......可能是測試在並行線程中運行?

我在別處看過,在單元測試中使用文件系統是'壞習慣',但真的是?當然,有一種解決方法不會破壞文件系統?

回答

1

如果你只是在尋找一個臨時文件,看看tempfile - 這應該清理所有它自己。

+0

實際上,我之前找到的.dispose()方法並未可靠地釋放文件系統資源。臨時文件框架似乎提供了一個整潔的解決方案(雖然涉及到放棄創建和整理我的臨時文件,或者知道如何正確釋放資源) – hwjp 2010-06-24 14:16:14

+0

無知是幸福的。如果它工作,它的工作;) – Oli 2010-06-24 14:33:12

2

您是否記得明確關閉在TEMPORARY_FILE_NAME上運行的文件處理程序?

Python Documentation

在Windows上,嘗試刪除 文件正在使用中導致 異常升高;

+0

嗨,這是非常正確的 - 雖然我沒有明確打開文件處理程序,我沒有在我的測試正確收拾。我最終在我使用的sqlalchemy api中找到了一個.dispose()方法,它釋放連接和文件上的鎖,所以os.removes現在可以正常工作。 – hwjp 2010-06-14 12:39:25