如何在python中完成测试后删除测试文件?

时间:2014-09-02 03:38:25

标签: python unit-testing testing

我创建了一个测试,在setUp中我创建了这样的文件:

 class TestSomething :
     def setUp(self):
         # create file
         fo = open('some_file_to_test','w')
         fo.write('write_something')
         fo.close()

     def test_something(self):
         # call some function to manipulate file
         ...
         # do some assert
         ...

     def test_another_test(self):
         # another testing with the same setUp file
         ...

在测试结束时,无论成功与否,我都希望测试文件不见了 完成测试后如何删除文件?

4 个答案:

答案 0 :(得分:6)

其他选项是使用TestCase的addCleanup()方法添加要在tearDown()之后调用的函数:

class TestSomething(TestCase):
     def setUp(self):
         # create file
         fo = open('some_file_to_test','w')
         fo.write('write_something')
         fo.close()
         # register remove function
         self.addCleanup(os.remove, 'some_file_to_test')

在有大量文件或使用随机名称创建文件时,它比tearDown()更方便,因为您可以在创建文件后添加清理方法。

答案 1 :(得分:5)

假设您正在使用 unittest -esque框架(即 nose 等),您可能希望使用tearDown方法删除文件,因为它将在每次测试后运行。

def tearDown(self):
    os.remove('some_file_to_test')

如果您只想在所有测试后删除此文件,可以在方法setUpClass中创建它并在方法tearDownClass中删除它,该方法将在之前和之后运行测试分别运行。

答案 2 :(得分:4)

写一个tearDown方法:

https://docs.python.org/3/library/unittest.html#unittest.TestCase.tearDown

    def tearDown(self):
        import os
        os.remove('some_file_to_test')

另请查看tempfile模块,看看它在这种情况下是否有用。

答案 3 :(得分:1)

如果您使用的是pytest或其他无类测试框架,请改用自删除临时文件:

import tempfile
with tempfile.NamedTemporaryFile() as f:
     f.write('write_something')
     # assert stuff here

# Here the file is closed and thus deleted