2010-06-14 66 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