首页 > 解决方案 > 如何创建用于测试的临时文件结构

问题描述

在单元测试和 Selenium 功能测试文件期间,会生成之后不会清理的文件。我花了很长时间试图让django-cleanup工作,但它什么也没做。

我想我需要创建一个临时文件结构,文件可以在测试期间上传到然后销毁。这就是我创建临时 MEDIA_ROOT 文件的方式:

MEDIA_ROOT = tempfile.mkdtemp()

@override_settings(MEDIA_ROOT=MEDIA_ROOT)
class UnitTest(TestCase):

    @classmethod
    def tearDownClass(cls): 
        shutil.rmtree(MEDIA_ROOT, ignore_errors=True)
        super().tearDownClass()

问题是,虽然我可能创建了一个临时 MEDIA_ROOT 文件夹,但它并没有创建子文件夹和文件。

我的项目中的文件结构如下所示

MEDIA_ROOT
    profile_pics
        default.jpg
    user_files

在执行每个测试之前,会创建一个用户,并在创建用户期间为用户分配一个配置文件图片“default.jpg”。这会使每个测试崩溃,因为 profile_pics 文件夹和 default.jpg 图像都不存在。如果它没有在这里崩溃,它会在稍后崩溃,因为它会尝试将文件保存在位于 MEDIA 内的文件夹中,这些文件夹在我的临时文件中不存在。

如何在不使用 Django Cleanup 的情况下在测试后删除所有文件?或者我如何创建一个临时媒体文件(类似于我已经在做的),以及其中的文件结构(它还必须包含用户创建过程中需要的 default.jpg 图像)?

谢谢你。

标签: djangodjango-testingdjango-tests

解决方案


对于资源准备,您应该使用 setup 和 tearDown 方法

class MyViewSetTestCase(TestCase):
    def setUp(self):
        # do directory & files creation here
        pass

    def tearDown(self):
        # do cleanup (remove all dirs & files) here
        pass

每次测试前调用 setUp 并在每次测试后调用 tearDown

您可以使用os.makedirs创建目录树

您可以使用shutil.rmtree删除目录树


推荐阅读