Python单元测试中os.remove失败的文件系统问题

2 投票
2 回答
1277 浏览
提问于 2025-04-15 23:56

我正在对一个函数进行单元测试,这个函数尝试打开一个新文件,但如果文件已经存在的话,它应该失败。当这个函数成功运行时,新文件会被创建,所以我想在每次测试结束后删除这个文件,但似乎没有成功:

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 报错似乎表明文件正在被使用……难道是因为测试是在并行线程中运行的吗?

我在其他地方看到过说在单元测试中使用文件系统是“坏习惯”,但真的吗?难道没有不涉及虚拟文件系统的方法吗?

2 个回答

2

你还记得要明确地关闭操作临时文件的文件处理器吗?

来自 Python文档

在Windows系统上,如果你试图删除一个正在使用中的文件,会导致出现一个异常错误。

2

如果你只是想找一个临时文件,可以看看 tempfile 这个模块——它会自动帮你处理清理工作。

撰写回答